/* * Copyright 2016 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. */ package com.thoughtworks.go.config.serialization; import com.thoughtworks.go.config.*; import com.thoughtworks.go.domain.config.Admin; import com.thoughtworks.go.helper.PipelineConfigMother; import com.thoughtworks.go.util.ConfigElementImplementationRegistryMother; import com.thoughtworks.go.util.GoConstants; import org.junit.Test; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.assertThat; public class BasicPipelineConfigsTest { private static final String PIPELINES_WITH_PERMISSION = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" + "<cruise xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " + "xsi:noNamespaceSchemaLocation=\"cruise-config.xsd\" schemaVersion=\"" + GoConstants.CONFIG_SCHEMA_VERSION + "\">\n" + " <server artifactsdir=\"other-artifacts\">\n" + " <security>\n" + " <roles>\n" + " <role name=\"admin\" />\n" + " <role name=\"mingle\" />\n" + " </roles>\n" + " </security>\n" + " </server>\n" + " <pipelines group=\"defaultGroup\">\n" + " <authorization>\n" + " %s " + " </authorization>" + " <pipeline name=\"pipeline1\" labeltemplate=\"alpha.${COUNT}\">\n" + " <materials>\n" + " <svn url=\"foobar\" checkexternals=\"true\" />\n" + " </materials>\n" + " <stage name=\"mingle\">\n" + " <jobs>\n" + " <job name=\"functional\">\n" + " <artifacts>\n" + " <artifact src=\"artifact1.xml\" dest=\"cruise-output\" />\n" + " </artifacts>\n" + " </job>\n" + " </jobs>\n" + " </stage>\n" + " </pipeline>\n" + " </pipelines>\n" + "</cruise>\n\n"; private static final String VIEW_PERMISSION = " <view>\n" + " <user>jez</user>\n" + " <user>lqiao</user>\n" + " <role>mingle</role>\n" + " </view>\n"; private static final String OPERATION_PERMISSION = " <operate>\n" + " <user>jez</user>\n" + " <user>lqiao</user>\n" + " <role>mingle</role>\n" + " </operate>\n"; @Test public void shouldWriteOperatePermissionForGroupCorrectly() { OperationConfig operationConfig = new OperationConfig(new AdminUser(new CaseInsensitiveString("jez")), new AdminUser(new CaseInsensitiveString("lqiao")), new AdminRole( new CaseInsensitiveString("mingle"))); Authorization authorization = new Authorization(operationConfig); PipelineConfig pipelineConfig = PipelineConfigMother.pipelineConfig("pipeline1"); PipelineConfigs pipelineConfigs = new BasicPipelineConfigs(authorization, pipelineConfig); MagicalGoConfigXmlWriter xmlWriter = new MagicalGoConfigXmlWriter(new ConfigCache(), ConfigElementImplementationRegistryMother.withNoPlugins() ); String xml = xmlWriter.toXmlPartial(pipelineConfigs); assertThat(xml, is("<pipelines>\n" + " <authorization>\n" + " <operate>\n" + " <user>jez</user>\n" + " <user>lqiao</user>\n" + " <role>mingle</role>\n" + " </operate>\n" + " </authorization>\n" + " <pipeline name=\"pipeline1\">\n" + " <materials>\n" + " <svn url=\"http://some/svn/url\" dest=\"svnDir\" materialName=\"http___some_svn_url\" />\n" + " </materials>\n" + " <stage name=\"mingle\">\n" + " <jobs />\n" + " </stage>\n" + " </pipeline>\n" + "</pipelines>")); } @Test public void shouldLoadOperationPermissionForPipelines() { CruiseConfig cruiseConfig = ConfigMigrator.load(configureAuthorization(OPERATION_PERMISSION)); PipelineConfigs group = cruiseConfig.getGroups().first(); assertThat(group.getAuthorization(), instanceOf(Authorization.class)); AdminsConfig actual = group.getAuthorization().getOperationConfig(); assertion(actual); } @Test public void shouldLoadOperationAndViewPermissionForPipelinesNoMatterTheConfigOrder() { CruiseConfig cruiseConfig = ConfigMigrator.load(configureAuthorization(OPERATION_PERMISSION + VIEW_PERMISSION)); PipelineConfigs group = cruiseConfig.getGroups().first(); assertThat(group.getAuthorization(), instanceOf(Authorization.class)); AdminsConfig actualView = group.getAuthorization().getViewConfig(); AdminsConfig actualOperation = group.getAuthorization().getOperationConfig(); assertion(actualView); assertion(actualOperation); } @Test public void shouldLoadViewAndOperationPermissionForPipelinesNoMatterTheConfigOrder() { CruiseConfig cruiseConfig = ConfigMigrator.load(configureAuthorization(VIEW_PERMISSION + OPERATION_PERMISSION)); PipelineConfigs group = cruiseConfig.getGroups().first(); assertThat(group.getAuthorization(), instanceOf(Authorization.class)); AdminsConfig actualView = group.getAuthorization().getViewConfig(); AdminsConfig actualOperation = group.getAuthorization().getOperationConfig(); assertion(actualView); assertion(actualOperation); } private void assertion(AdminsConfig actualView) { assertThat(actualView, hasItem((Admin) new AdminUser(new CaseInsensitiveString("jez")))); assertThat(actualView, hasItem((Admin) new AdminUser(new CaseInsensitiveString("lqiao")))); assertThat(actualView, hasItem((Admin) new AdminRole(new CaseInsensitiveString("mingle")))); } private String configureAuthorization(String permission) { return String.format(PIPELINES_WITH_PERMISSION, permission); } }