/*************************GO-LICENSE-START*********************************
* Copyright 2014 ThoughtWorks, Inc.
*
* Licensed 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.
*************************GO-LICENSE-END***********************************/
package com.thoughtworks.go.config;
import com.thoughtworks.go.config.elastic.ElasticConfig;
import com.thoughtworks.go.config.elastic.ElasticProfile;
import com.thoughtworks.go.config.elastic.ElasticProfiles;
import com.thoughtworks.go.config.materials.MaterialConfigs;
import com.thoughtworks.go.config.materials.mercurial.HgMaterialConfig;
import com.thoughtworks.go.domain.PipelineGroups;
import com.thoughtworks.go.domain.packagerepository.*;
import com.thoughtworks.go.domain.scm.SCMMother;
import com.thoughtworks.go.domain.scm.SCMs;
import com.thoughtworks.go.helper.GoConfigMother;
import com.thoughtworks.go.helper.PipelineConfigMother;
import org.hamcrest.MatcherAssert;
import org.junit.Before;
import org.junit.Test;
import static junit.framework.TestCase.assertTrue;
import static org.hamcrest.core.Is.is;
import static org.hamcrest.core.IsNull.nullValue;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
public class ConfigSaveValidationContextTest {
@Before
public void setUp() throws Exception {
}
@Test
public void testShouldReturnTrueIfTemplatesIsAnAncestor() {
ValidationContext context = ConfigSaveValidationContext.forChain(new BasicCruiseConfig(), new TemplatesConfig(), new PipelineTemplateConfig());
assertThat(context.isWithinTemplates(), is(true));
}
@Test
public void testShouldReturnFalseIfTemplatesIsNotAnAncestor() {
ValidationContext context = ConfigSaveValidationContext.forChain(new BasicCruiseConfig(), new PipelineGroups(), new BasicPipelineConfigs(), new PipelineConfig());
assertThat(context.isWithinTemplates(), is(false));
}
@Test
public void shouldReturnAllMaterialsMatchingTheFingerprint() {
CruiseConfig cruiseConfig = new BasicCruiseConfig();
HgMaterialConfig hg = new HgMaterialConfig("url", null);
for (int i=0; i<10; i++) {
PipelineConfig pipelineConfig = PipelineConfigMother.pipelineConfig("pipeline" + i, new MaterialConfigs(hg));
cruiseConfig.addPipeline("defaultGroup", pipelineConfig);
}
ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig);
assertThat(context.getAllMaterialsByFingerPrint(hg.getFingerprint()).size(), is(10));
}
@Test
public void shouldReturnEmptyListWhenNoMaterialsMatch() {
CruiseConfig cruiseConfig = new BasicCruiseConfig();
ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig);
assertThat(context.getAllMaterialsByFingerPrint("something").isEmpty(), is(true));
}
@Test
public void shouldGetPipelineConfigByName(){
BasicCruiseConfig cruiseConfig = GoConfigMother.configWithPipelines("p1");
ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig);
assertThat(context.getPipelineConfigByName(new CaseInsensitiveString("p1")), is(cruiseConfig.allPipelines().get(0)));
assertThat(context.getPipelineConfigByName(new CaseInsensitiveString("does_not_exist")), is(nullValue()));
}
@Test
public void shouldGetServerSecurityConfig(){
BasicCruiseConfig cruiseConfig = GoConfigMother.configWithPipelines("p1");
GoConfigMother.enableSecurityWithPasswordFile(cruiseConfig);
ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig);
assertThat(context.getServerSecurityConfig(), is(cruiseConfig.server().security()));
}
@Test
public void shouldReturnIfTheContextBelongsToPipeline(){
ValidationContext context = ConfigSaveValidationContext.forChain(new BasicPipelineConfigs());
assertThat(context.isWithinPipelines(), is(true));
assertThat(context.isWithinTemplates(), is(false));
}
@Test
public void shouldReturnIfTheContextBelongsToTemplate() {
ValidationContext context = ConfigSaveValidationContext.forChain(new TemplatesConfig());
assertThat(context.isWithinPipelines(), is(false));
assertThat(context.isWithinTemplates(), is(true));
}
@Test
public void shouldCheckForExistenceOfTemplate(){
BasicCruiseConfig cruiseConfig = new BasicCruiseConfig();
cruiseConfig.addTemplate(new PipelineTemplateConfig(new CaseInsensitiveString("t1")));
ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig);
MatcherAssert.assertThat(context.doesTemplateExist(new CaseInsensitiveString("t1")), is(true));
MatcherAssert.assertThat(context.doesTemplateExist(new CaseInsensitiveString("t2")), is(false));
}
@Test
public void shouldCheckForExistenceOfSCMS() throws Exception {
BasicCruiseConfig cruiseConfig = new BasicCruiseConfig();
cruiseConfig.setSCMs(new SCMs(SCMMother.create("scm-id")));
ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig);
MatcherAssert.assertThat(context.findScmById("scm-id").getId(), is("scm-id"));
}
@Test
public void shouldCheckForExistenceOfPackage() throws Exception {
BasicCruiseConfig cruiseConfig = new BasicCruiseConfig();
cruiseConfig.setPackageRepositories(new PackageRepositories(PackageRepositoryMother.create("repo-id")));
cruiseConfig.getPackageRepositories().find("repo-id").setPackages(new Packages(PackageDefinitionMother.create("package-id")));
ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig);
MatcherAssert.assertThat(context.findPackageById("package-id").getId(), is("repo-id"));
}
@Test
public void isValidProfileIdShouldBeValidInPresenceOfElasticProfile() {
BasicCruiseConfig cruiseConfig = new BasicCruiseConfig();
ElasticConfig elasticConfig = new ElasticConfig();
elasticConfig.setProfiles(new ElasticProfiles(new ElasticProfile("docker.unit-test", "docker")));
cruiseConfig.setServerConfig(new ServerConfig(elasticConfig));
ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig);
assertTrue(context.isValidProfileId("docker.unit-test"));
}
@Test
public void isValidProfileIdShouldBeInValidInAbsenceOfElasticProfileForTheGivenId() {
BasicCruiseConfig cruiseConfig = new BasicCruiseConfig();
ElasticConfig elasticConfig = new ElasticConfig();
elasticConfig.setProfiles(new ElasticProfiles(new ElasticProfile("docker.unit-test", "docker")));
cruiseConfig.setServerConfig(new ServerConfig(elasticConfig));
ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig);
assertFalse(context.isValidProfileId("invalid.profile-id"));
}
@Test
public void isValidProfileIdShouldBeInValidInAbsenceOfElasticProfiles() {
BasicCruiseConfig cruiseConfig = new BasicCruiseConfig();
ValidationContext context = ConfigSaveValidationContext.forChain(cruiseConfig);
assertFalse(context.isValidProfileId("docker.unit-test"));
}
}