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 }