View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.eclipse.aether.internal.impl;
20  
21  import org.eclipse.aether.DefaultRepositorySystemSession;
22  import org.eclipse.aether.RepositorySystemSession;
23  import org.eclipse.aether.repository.RemoteRepository;
24  import org.eclipse.aether.transfer.RepositoryOfflineException;
25  import org.junit.jupiter.api.BeforeEach;
26  import org.junit.jupiter.api.Test;
27  
28  import static org.junit.jupiter.api.Assertions.*;
29  
30  public class DefaultOfflineControllerTest {
31  
32      private DefaultOfflineController controller;
33  
34      private RepositorySystemSession newSession(boolean offline, String protocols, String hosts) {
35          DefaultRepositorySystemSession session = new DefaultRepositorySystemSession();
36          session.setOffline(offline);
37          session.setConfigProperty(DefaultOfflineController.CONFIG_PROP_OFFLINE_PROTOCOLS, protocols);
38          session.setConfigProperty(DefaultOfflineController.CONFIG_PROP_OFFLINE_HOSTS, hosts);
39          return session;
40      }
41  
42      private RemoteRepository newRepo(String url) {
43          return new RemoteRepository.Builder("central", "default", url).build();
44      }
45  
46      @BeforeEach
47      void setup() {
48          controller = new DefaultOfflineController();
49      }
50  
51      @Test
52      void testCheckOffline_Online() {
53          assertThrows(
54                  RepositoryOfflineException.class,
55                  () -> controller.checkOffline(newSession(false, null, null), newRepo("http://eclipse.org")));
56      }
57  
58      @Test
59      void testCheckOffline_Offline() {
60          assertThrows(
61                  RepositoryOfflineException.class,
62                  () -> controller.checkOffline(newSession(true, null, null), newRepo("http://eclipse.org")));
63      }
64  
65      @Test
66      void testCheckOffline_Offline_OfflineProtocol() throws Exception {
67          controller.checkOffline(newSession(true, "file", null), newRepo("file://repo"));
68          controller.checkOffline(newSession(true, "file", null), newRepo("FILE://repo"));
69          controller.checkOffline(newSession(true, "  file  ,  classpath  ", null), newRepo("file://repo"));
70          controller.checkOffline(newSession(true, "  file  ,  classpath  ", null), newRepo("classpath://repo"));
71      }
72  
73      @Test
74      void testCheckOffline_Offline_OnlineProtocol() {
75          assertThrows(
76                  RepositoryOfflineException.class,
77                  () -> controller.checkOffline(newSession(true, "file", null), newRepo("http://eclipse.org")));
78      }
79  
80      @Test
81      void testCheckOffline_Offline_OfflineHost() throws Exception {
82          controller.checkOffline(newSession(true, null, "localhost"), newRepo("http://localhost"));
83          controller.checkOffline(newSession(true, null, "localhost"), newRepo("http://LOCALHOST"));
84          controller.checkOffline(newSession(true, null, "  localhost  ,  127.0.0.1  "), newRepo("http://localhost"));
85          controller.checkOffline(newSession(true, null, "  localhost  ,  127.0.0.1  "), newRepo("http://127.0.0.1"));
86      }
87  
88      @Test
89      void testCheckOffline_Offline_OnlineHost() {
90          assertThrows(
91                  RepositoryOfflineException.class,
92                  () -> controller.checkOffline(newSession(true, null, "localhost"), newRepo("http://eclipse.org")));
93      }
94  }