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.internal.test.util.TestUtils;
23  import org.eclipse.aether.repository.RemoteRepository;
24  import org.eclipse.aether.repository.RepositoryPolicy;
25  import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy;
26  import org.eclipse.aether.transfer.TransferResource;
27  import org.junit.jupiter.api.AfterEach;
28  import org.junit.jupiter.api.BeforeEach;
29  import org.junit.jupiter.api.Test;
30  
31  import static org.junit.jupiter.api.Assertions.*;
32  
33  public class DefaultChecksumPolicyProviderTest {
34  
35      private static final String CHECKSUM_POLICY_UNKNOWN = "unknown";
36  
37      private DefaultRepositorySystemSession session;
38  
39      private DefaultChecksumPolicyProvider provider;
40  
41      private RemoteRepository repository;
42  
43      private TransferResource resource;
44  
45      @BeforeEach
46      void setup() {
47          session = TestUtils.newSession();
48          provider = new DefaultChecksumPolicyProvider();
49          repository = new RemoteRepository.Builder("test", "default", "file:/void").build();
50          resource = new TransferResource(repository.getId(), repository.getUrl(), "file.txt", null, null);
51      }
52  
53      @AfterEach
54      void teardown() {
55          provider = null;
56          session = null;
57          repository = null;
58          resource = null;
59      }
60  
61      @Test
62      void testNewChecksumPolicy_Fail() {
63          ChecksumPolicy policy =
64                  provider.newChecksumPolicy(session, repository, resource, RepositoryPolicy.CHECKSUM_POLICY_FAIL);
65          assertNotNull(policy);
66          assertEquals(FailChecksumPolicy.class, policy.getClass());
67      }
68  
69      @Test
70      void testNewChecksumPolicy_Warn() {
71          ChecksumPolicy policy =
72                  provider.newChecksumPolicy(session, repository, resource, RepositoryPolicy.CHECKSUM_POLICY_WARN);
73          assertNotNull(policy);
74          assertEquals(WarnChecksumPolicy.class, policy.getClass());
75      }
76  
77      @Test
78      void testNewChecksumPolicy_Ignore() {
79          ChecksumPolicy policy =
80                  provider.newChecksumPolicy(session, repository, resource, RepositoryPolicy.CHECKSUM_POLICY_IGNORE);
81          assertNull(policy);
82      }
83  
84      @Test
85      void testNewChecksumPolicy_Unknown() {
86          assertThrows(
87                  IllegalArgumentException.class,
88                  () -> provider.newChecksumPolicy(session, repository, resource, CHECKSUM_POLICY_UNKNOWN));
89      }
90  
91      @Test
92      void testGetEffectiveChecksumPolicy_EqualPolicies() {
93          String[] policies = {
94              RepositoryPolicy.CHECKSUM_POLICY_FAIL,
95              RepositoryPolicy.CHECKSUM_POLICY_WARN,
96              RepositoryPolicy.CHECKSUM_POLICY_IGNORE
97          };
98          for (String policy : policies) {
99              assertEquals(policy, provider.getEffectiveChecksumPolicy(session, policy, policy), policy);
100         }
101     }
102 
103     @Test
104     void testGetEffectiveChecksumPolicy_DifferentPolicies() {
105         String[][] testCases = {
106             {RepositoryPolicy.CHECKSUM_POLICY_WARN, RepositoryPolicy.CHECKSUM_POLICY_FAIL},
107             {RepositoryPolicy.CHECKSUM_POLICY_IGNORE, RepositoryPolicy.CHECKSUM_POLICY_FAIL},
108             {RepositoryPolicy.CHECKSUM_POLICY_IGNORE, RepositoryPolicy.CHECKSUM_POLICY_WARN}
109         };
110         for (String[] testCase : testCases) {
111             assertEquals(
112                     testCase[0],
113                     provider.getEffectiveChecksumPolicy(session, testCase[0], testCase[1]),
114                     testCase[0] + " vs " + testCase[1]);
115             assertEquals(
116                     testCase[0],
117                     provider.getEffectiveChecksumPolicy(session, testCase[1], testCase[0]),
118                     testCase[0] + " vs " + testCase[1]);
119         }
120     }
121 
122     @Test
123     void testGetEffectiveChecksumPolicy_UnknownPolicies() {
124         String[][] testCases = {
125             {RepositoryPolicy.CHECKSUM_POLICY_WARN, RepositoryPolicy.CHECKSUM_POLICY_FAIL},
126             {RepositoryPolicy.CHECKSUM_POLICY_WARN, RepositoryPolicy.CHECKSUM_POLICY_WARN},
127             {RepositoryPolicy.CHECKSUM_POLICY_IGNORE, RepositoryPolicy.CHECKSUM_POLICY_IGNORE}
128         };
129         for (String[] testCase : testCases) {
130             IllegalArgumentException e = assertThrows(
131                     IllegalArgumentException.class,
132                     () -> provider.getEffectiveChecksumPolicy(session, CHECKSUM_POLICY_UNKNOWN, testCase[1]));
133             assertEquals(e.getMessage(), "Unsupported policy: unknown");
134             e = assertThrows(
135                     IllegalArgumentException.class,
136                     () -> provider.getEffectiveChecksumPolicy(session, testCase[1], CHECKSUM_POLICY_UNKNOWN));
137             assertEquals(e.getMessage(), "Unsupported policy: unknown");
138         }
139     }
140 }