View Javadoc

1   package com.atlassian.plugin.validation;
2   
3   import com.atlassian.fugue.Either;
4   import com.atlassian.plugin.Application;
5   import com.atlassian.plugin.InstallationMode;
6   import com.google.common.collect.ImmutableSet;
7   import com.google.common.collect.Iterables;
8   import org.junit.Test;
9   
10  import java.util.Set;
11  
12  import static com.atlassian.plugin.validation.DescriptorValidator.ValidationError;
13  import static com.atlassian.plugin.validation.DescriptorValidator.ValidationSuccess;
14  import static com.atlassian.plugin.validation.ResourcesLoader.getInput;
15  import static org.junit.Assert.assertEquals;
16  import static org.junit.Assert.assertFalse;
17  import static org.junit.Assert.assertTrue;
18  
19  public final class DescriptorValidatorTest
20  {
21      @Test
22      public void testGetRequiredPermissionsIsEmptyForEmptyDescriptor()
23      {
24          final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/empty-descriptor.xml"), getInput("/schema.xsd"), getApplications());
25  
26          final Set<String> requiredPermissions = descriptorValidator.getRequiredPermissions(InstallationMode.LOCAL);
27          assertTrue(requiredPermissions.isEmpty());
28      }
29  
30      @Test
31      public void testGetRequiredPermissionsIsEmptyForDescriptorWithModuleRequiringPermission()
32      {
33          final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-with-module-requiring-exec-java.xml"), getInput("/schema.xsd"), getApplications());
34  
35          final Set<String> requiredPermissions = descriptorValidator.getRequiredPermissions(InstallationMode.LOCAL);
36          assertEquals(1, requiredPermissions.size());
37          assertEquals("execute_java", Iterables.getFirst(requiredPermissions, null));
38      }
39  
40      @Test
41      public void testHasNecessaryPermissionsForEmptyDescriptor()
42      {
43          final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/empty-descriptor.xml"), getInput("/schema.xsd"), getApplications());
44  
45          final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.LOCAL);
46          assertTrue(validation.isRight());
47          assertFalse(validation.right().get().isRemotable());
48      }
49  
50      @Test
51      public void testHasNecessaryPermissionsForRemotableDescriptor()
52      {
53          final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/remotable-descriptor.xml"), getInput("/schema.xsd"), getApplications());
54  
55          final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.LOCAL);
56          assertTrue(validation.isRight());
57          assertTrue(validation.right().get().isRemotable());
58      }
59  
60      @Test
61      public void testHasNecessaryPermissionsForDescriptorWithModuleRequiringPermission()
62      {
63          final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-with-module-requiring-exec-java.xml"), getInput("/schema.xsd"), getApplications());
64  
65          final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.LOCAL);
66          assertFalse(validation.isRight());
67          final ValidationError validationError = validation.left().get();
68          assertEquals(1, validationError.getNotAskedPermissions().size());
69          assertEquals("execute_java", Iterables.getFirst(validationError.getNotAskedPermissions(), null));
70      }
71  
72      @Test
73      public void testHasNecessaryPermissionsForDescriptorWithModuleRequiringPermissionButAtlassianPlugins2()
74      {
75          final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-with-module-requiring-exec-java-but-version-2.xml"), getInput("/schema.xsd"), getApplications());
76  
77          final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.LOCAL);
78          assertTrue(validation.isRight());
79      }
80  
81      @Test
82      public void testHasNecessaryPermissionsForDescriptorWithModuleRequiringPermissionAndDescriptorAskingForIt()
83      {
84          final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-asking-exec-java.xml"), getInput("/schema.xsd"), getApplications());
85  
86          final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.LOCAL);
87          assertTrue(validation.isRight());
88      }
89  
90      @Test
91      public void testHasNecessaryPermissionsForDescriptorWithModuleRequiringPermissionAndDescriptorAskingForItInLocalMode()
92      {
93          final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-asking-exec-java-when-installed-locally.xml"), getInput("/schema.xsd"), getApplications());
94  
95          final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.LOCAL);
96          assertTrue(validation.isRight());
97      }
98  
99      @Test
100     public void testHasNecessaryPermissionsForDescriptorWithModuleRequiringPermissionAndDescriptorAskingForItInRemoteMode()
101     {
102         final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-asking-exec-java-when-installed-locally.xml"), getInput("/schema.xsd"), getApplications());
103 
104         final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.REMOTE);
105         assertTrue(validation.isRight());
106     }
107 
108     @Test
109     public void testHasNecessaryPermissionsForDescriptorWithModuleRequiringPermissionAndDescriptorAskingForItInLocalModeButRequireInRemoteTestingLocal()
110     {
111         final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-asking-exec-java-locally-but-require-remotely.xml"), getInput("/schema.xsd"), getApplications());
112 
113         final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.LOCAL);
114         assertTrue(validation.isRight());
115     }
116 
117     @Test
118     public void testHasNecessaryPermissionsForDescriptorWithModuleRequiringPermissionAndDescriptorAskingForItInLocalModeButRequireInRemoteTestingRemote()
119     {
120         final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-asking-exec-java-locally-but-require-remotely.xml"), getInput("/schema.xsd"), getApplications());
121 
122         final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.REMOTE);
123         assertTrue(validation.isLeft());
124         final ValidationError validationError = validation.left().get();
125         assertEquals(1, validationError.getNotAskedPermissions().size());
126         assertEquals("execute_java", Iterables.getFirst(validationError.getNotAskedPermissions(), null));
127     }
128 
129     @Test
130     public void testHasNecessaryPermissionsForDescriptorRequiringNonValidPermission()
131     {
132         final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-requiring-non-valid-permission.xml"), getInput("/schema.xsd"), getApplications());
133 
134         final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.LOCAL);
135         assertFalse(validation.isRight());
136         final ValidationError validationError = validation.left().get();
137         assertEquals(1, validationError.getNonValidPermissions().size());
138         assertEquals("funky_permission", Iterables.getFirst(validationError.getNonValidPermissions(), null));
139     }
140 
141     @Test
142     public void testHasNecessaryPermissionsForDescriptorRequiringNonValidPermissionForOtherInstallationMode()
143     {
144         final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-requiring-non-valid-permission-local.xml"), getInput("/schema.xsd"), getApplications());
145 
146         final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.REMOTE);
147         assertTrue(validation.isRight());
148     }
149 
150     @Test
151     public void testHasNecessaryPermissionsForDescriptorRequiringNonValidPermissionForSameInstallationMode()
152     {
153         final DescriptorValidator descriptorValidator = new DescriptorValidator(getInput("/descriptor-requiring-non-valid-permission-local.xml"), getInput("/schema.xsd"), getApplications());
154 
155         final Either<ValidationError, ValidationSuccess> validation = descriptorValidator.validate(InstallationMode.LOCAL);
156         assertFalse(validation.isRight());
157         final ValidationError validationError = validation.left().get();
158         assertEquals(1, validationError.getNonValidPermissions().size());
159         assertEquals("funky_permission", Iterables.getFirst(validationError.getNonValidPermissions(), null));
160     }
161 
162     private ImmutableSet<Application> getApplications()
163     {
164         return ImmutableSet.<Application>of(new Application()
165         {
166             @Override
167             public String getKey()
168             {
169                 return "test-app";
170             }
171 
172             @Override
173             public String getVersion()
174             {
175                 return "1.0";
176             }
177 
178             @Override
179             public String getBuildNumber()
180             {
181                 return "1";
182             }
183         });
184     }
185 }