blob: 7a9a6a2018654e96207adb62860ddeec829548ab [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.sling.provisioning.model;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.Enumeration;
import java.util.Map.Entry;
import org.junit.Before;
import org.junit.Test;
public class ModelProcessorTest {
private Model testModel;
private ModelProcessor underTest;
@Before
public void setUp() {
testModel = new Model();
testModel.setLocation("LocM1");
Feature feature1 = testModel.getOrCreateFeature("feature1");
feature1.setLocation("LocF1");
feature1.setComment("ComF1");
feature1.setType(FeatureTypes.SUBSYSTEM_COMPOSITE);
feature1.getVariables().setLocation("LocFV1");
feature1.getVariables().setComment("ComFV1");
feature1.getVariables().put("k1", "v1");
feature1.getVariables().put("k2", "v2");
RunMode runMode11 = feature1.getOrCreateRunMode(new String[] { "rm1", "rm2"});
runMode11.setLocation("LocRM11");
RunMode runMode12 = feature1.getOrCreateRunMode(new String[] { "rm2"});
ArtifactGroup group12 = runMode12.getOrCreateArtifactGroup(10);
group12.setLocation("LocRMG11");
group12.setComment("ComRMG11");
group12.add(new Artifact("g1", "a1", "v1", "c1", "t1"));
group12.add(new Artifact("g2", "a2", "v2", null, null));
runMode12.getConfigurations().setLocation("LocConf12");
runMode12.getConfigurations().setComment("ComConf12");
Configuration conf121 = runMode12.getOrCreateConfiguration("pid1", null);
conf121.setLocation("LocConf121");
conf121.setComment("ComConf121");
conf121.getProperties().put("conf1", "v1");
conf121.getProperties().put("conf2", "v2");
Configuration conf122 = runMode12.getOrCreateConfiguration("pid2", "fac2");
conf122.setLocation("LocConf122");
conf122.setComment("ComConf122");
conf122.getProperties().put("conf3", "v3");
runMode12.getSettings().setLocation("LocSet12");
runMode12.getSettings().setComment("ComSet12");
runMode12.getSettings().put("set1", "v1");
runMode12.getSettings().put("set2", "v2");
Feature feature2 = testModel.getOrCreateFeature("feature1");
RunMode runMode21 = feature2.getOrCreateRunMode(new String[0]);
ArtifactGroup group21 = runMode21.getOrCreateArtifactGroup(20);
group21.add(new Artifact("g3", "a3", null, null, null));
underTest = new TestModelProcessor();
}
@Test
public void testProcess() {
Model model = underTest.process(testModel);
assertEquals("LocM1", model.getLocation());
Feature feature1 = model.getFeature("feature1");
assertNotNull(feature1);
assertEquals("LocF1", feature1.getLocation());
assertEquals("ComF1", feature1.getComment());
assertEquals(FeatureTypes.SUBSYSTEM_COMPOSITE, feature1.getType());
assertEquals("LocFV1", feature1.getVariables().getLocation());
assertEquals("ComFV1", feature1.getVariables().getComment());
assertEquals("#v1", feature1.getVariables().get("k1"));
assertEquals("#v2", feature1.getVariables().get("k2"));
RunMode runMode11 = feature1.getRunMode("rm1", "rm2");
assertNotNull(runMode11);
assertEquals("LocRM11", runMode11.getLocation());
RunMode runMode12 = feature1.getRunMode(new String[] { "rm2"});
assertNotNull(runMode12);
ArtifactGroup group12 = runMode12.getArtifactGroup(10);
assertNotNull(group12);
assertEquals("LocRMG11", group12.getLocation());
assertEquals("ComRMG11", group12.getComment());
U.assertArtifactsInGroup(group12, 2);
U.assertArtifact(group12, "mvn:#g1/#a1/#v1/#t1/#c1");
U.assertArtifact(group12, "mvn:#g2/#a2/#v2/#jar");
assertEquals("LocConf12", runMode12.getConfigurations().getLocation());
assertEquals("ComConf12", runMode12.getConfigurations().getComment());
Configuration conf121 = runMode12.getConfiguration("pid1", null);
assertEquals("LocConf121", conf121.getLocation());
assertEquals("ComConf121", conf121.getComment());
assertEquals("#v1", conf121.getProperties().get("conf1"));
assertEquals("#v2", conf121.getProperties().get("conf2"));
Configuration conf122 = runMode12.getConfiguration("pid2", "fac2");
assertEquals("LocConf122", conf122.getLocation());
assertEquals("ComConf122", conf122.getComment());
assertEquals("#v3", conf122.getProperties().get("conf3"));
assertEquals("LocSet12", runMode12.getSettings().getLocation());
assertEquals("ComSet12", runMode12.getSettings().getComment());
assertEquals("#v1", runMode12.getSettings().get("set1"));
assertEquals("#v2", runMode12.getSettings().get("set2"));
Feature feature2 = model.getFeature("feature1");
assertNotNull(feature2);
RunMode runMode21 = feature2.getRunMode();
assertNotNull(runMode21);
ArtifactGroup group21 = runMode21.getArtifactGroup(20);
assertNotNull(group21);
U.assertArtifactsInGroup(group21, 1);
U.assertArtifact(group21, "mvn:#g3/#a3/#LATEST/#jar");
}
static final class TestModelProcessor extends ModelProcessor {
@Override
protected KeyValueMap<String> processVariables(KeyValueMap<String> variables, Feature feature) {
KeyValueMap<String> newVars = new KeyValueMap<String>();
for (Entry<String, String> entry : variables) {
newVars.put(entry.getKey(), "#" + entry.getValue());
}
return newVars;
}
@Override
protected Artifact processArtifact(Artifact artifact, Feature feature, RunMode runMode) {
Artifact newArtifact = new Artifact(
artifact.getGroupId()!=null ? "#" + artifact.getGroupId() : null,
artifact.getArtifactId()!=null ? "#" + artifact.getArtifactId() : null,
artifact.getVersion()!=null ? "#" + artifact.getVersion() : "#LATEST",
artifact.getClassifier()!=null ? "#" + artifact.getClassifier() : null,
artifact.getType()!=null ? "#" + artifact.getType() : null);
return newArtifact;
}
@Override
protected Configuration processConfiguration(Configuration configuration, Feature feature, RunMode runMode) {
Configuration newConfig = new Configuration(configuration.getPid(), configuration.getFactoryPid());
final Enumeration<String> i = configuration.getProperties().keys();
while ( i.hasMoreElements() ) {
final String key = i.nextElement();
newConfig.getProperties().put(key, "#" + configuration.getProperties().get(key));
}
return newConfig;
}
@Override
protected KeyValueMap<String> processSettings(KeyValueMap<String> settings, Feature feature, RunMode runMode) {
KeyValueMap<String> newSettings = new KeyValueMap<String>();
for (Entry<String, String> entry : settings) {
newSettings.put(entry.getKey(), "#" + entry.getValue());
}
return newSettings;
}
}
}