@Override public void update(CruiseConfig modifiedConfig) { PackageRepositories repositories = modifiedConfig.getPackageRepositories(); repositories.add(this.repository); modifiedConfig.setPackageRepositories(repositories); } }
@Override public void update(CruiseConfig modifiedConfig) { PackageRepositories repositories = modifiedConfig.getPackageRepositories(); PackageRepository packageRepository = repositories.findPackageRepositoryHaving(this.packageDefinition.getId()); packageRepository.removePackage(this.packageDefinition.getId()); modifiedConfig.setPackageRepositories(repositories); }
@Override public void update(CruiseConfig modifiedConfig) { PackageRepositories packageRepositories = modifiedConfig.getPackageRepositories(); PackageRepository packageRepository = packageRepositories.find(repositoryId); int index = packageRepositories.indexOf(packageRepository); packageDefinition.setRepository(packageRepository); packageRepository.addPackage(this.packageDefinition); packageRepositories.replace(index, packageRepository); modifiedConfig.setPackageRepositories(packageRepositories); }
@Override public void update(CruiseConfig modifiedConfig) { existingPackageRepository = modifiedConfig.getPackageRepositories().find(repository.getRepoId()); PackageRepositories packageRepositories = modifiedConfig.getPackageRepositories(); packageRepositories.removePackageRepository(this.repository.getId()); modifiedConfig.setPackageRepositories(packageRepositories); }
@Override public void update(CruiseConfig modifiedConfig) { PackageRepositories packageRepositories = modifiedConfig.getPackageRepositories(); PackageRepository repository = packageRepositories.findPackageRepositoryHaving(oldPackageId); int index = packageRepositories.indexOf(repository); newPackage.setRepository(repository); repository.removePackage(oldPackageId); repository.addPackage(this.newPackage); packageRepositories.replace(index, repository); modifiedConfig.setPackageRepositories(packageRepositories); }
@Override public void update(CruiseConfig modifiedConfig) { PackageRepository oldRepo = modifiedConfig.getPackageRepositories().find(newRepo.getRepoId()); this.newRepo.setPackages(oldRepo.getPackages()); PackageRepositories repositories = modifiedConfig.getPackageRepositories(); repositories.replace(oldRepo, newRepo); modifiedConfig.setPackageRepositories(repositories); }
@Test public void shouldWriteToFileWithValueOfFalseForPackageDefinitionAutoUpdateWhenFalse() throws Exception { Configuration configuration = new Configuration(getConfigurationProperty("url", false, "http://go")); CruiseConfig cruiseConfig = new BasicCruiseConfig(); Packages packages = new Packages(); PackageDefinition aPackage = new PackageDefinition("package-id", "package-name", configuration); aPackage.setAutoUpdate(false); packages.add(aPackage); PackageRepository repository = createPackageRepository("plugin-id", "version", "id", "name", configuration, packages); cruiseConfig.setPackageRepositories(new PackageRepositories(repository)); xmlWriter.write(cruiseConfig, output, false); assertThat(output.toString().contains("autoUpdate=\"false\""), is(true)); }
@Test public void shouldNotWriteToFileWithDefaultValueOfTrueForPackageDefinitionAutoUpdateWhenTrue() throws Exception { Configuration configuration = new Configuration(getConfigurationProperty("url", false, "http://go")); CruiseConfig cruiseConfig = new BasicCruiseConfig(); Packages packages = new Packages(); PackageRepository repository = createPackageRepository("plugin-id", "version", "id", "name", configuration, packages); PackageDefinition aPackage = new PackageDefinition("package-id", "package-name", configuration); aPackage.setAutoUpdate(true); packages.add(aPackage); aPackage.setRepository(repository); cruiseConfig.setPackageRepositories(new PackageRepositories(repository)); xmlWriter.write(cruiseConfig, output, false); assertThat(output.toString().contains("autoUpdate=\"true\""), is(false)); }
@Test public void shouldNotAllowPackagesRepositoryWithInvalidId() throws Exception { Configuration packageConfiguration = new Configuration(getConfigurationProperty("name", false, "go-agent")); Configuration repositoryConfiguration = new Configuration(getConfigurationProperty("url", false, "http://go")); CruiseConfig configToSave = new BasicCruiseConfig(); PackageRepository packageRepository = createPackageRepository("plugin-id", "version", "id wth space", "name", repositoryConfiguration, new Packages(new PackageDefinition("id", "name", packageConfiguration))); configToSave.setPackageRepositories(new PackageRepositories(packageRepository)); try { xmlWriter.write(configToSave, output, false); fail("should not have allowed two repositories with same id"); } catch (XsdValidationException e) { assertThat(e.getMessage(), is("Repo id is invalid. \"id wth space\" should conform to the pattern - [a-zA-Z0-9_\\-]{1}[a-zA-Z0-9_\\-.]*")); } }
@Test public void shouldNotAllowPackagesWithInvalidId() throws Exception { Configuration packageConfiguration = new Configuration(getConfigurationProperty("name", false, "go-agent")); Configuration repositoryConfiguration = new Configuration(getConfigurationProperty("url", false, "http://go")); CruiseConfig configToSave = new BasicCruiseConfig(); PackageRepository packageRepository = createPackageRepository("plugin-id", "version", "id", "name", repositoryConfiguration, new Packages(new PackageDefinition("id with space", "name", packageConfiguration))); configToSave.setPackageRepositories(new PackageRepositories(packageRepository)); try { xmlWriter.write(configToSave, output, false); fail("should not have allowed two repositories with same id"); } catch (XsdValidationException e) { assertThat(e.getMessage(), is("Package id is invalid. \"id with space\" should conform to the pattern - [a-zA-Z0-9_\\-]{1}[a-zA-Z0-9_\\-.]*")); } }
@Test public void shouldNotAllowPackagesRepositoryWithInvalidName() throws Exception { Configuration packageConfiguration = new Configuration(getConfigurationProperty("name", false, "go-agent")); Configuration repositoryConfiguration = new Configuration(getConfigurationProperty("url", false, "http://go")); CruiseConfig configToSave = new BasicCruiseConfig(); PackageRepository packageRepository = createPackageRepository("plugin-id", "version", "id", "name with space", repositoryConfiguration, new Packages(new PackageDefinition("id", "name", packageConfiguration))); configToSave.setPackageRepositories(new PackageRepositories(packageRepository)); try { xmlWriter.write(configToSave, output, false); fail("should not have allowed two repositories with same id"); } catch (GoConfigInvalidException e) { assertThat(e.getMessage(), is("Invalid PackageRepository name 'name with space'. This must be alphanumeric and can contain underscores and periods (however, it cannot start with a period). The maximum allowed length is 255 characters.")); } }
@Test public void shouldNotAllowPackagesWithInvalidName() throws Exception { Configuration packageConfiguration = new Configuration(getConfigurationProperty("name", false, "go-agent")); Configuration repositoryConfiguration = new Configuration(getConfigurationProperty("url", false, "http://go")); CruiseConfig configToSave = new BasicCruiseConfig(); PackageRepository packageRepository = createPackageRepository("plugin-id", "version", "id", "name", repositoryConfiguration, new Packages(new PackageDefinition("id", "name with space", packageConfiguration))); configToSave.setPackageRepositories(new PackageRepositories(packageRepository)); try { xmlWriter.write(configToSave, output, false); fail("should not have allowed two repositories with same id"); } catch (GoConfigInvalidException e) { assertThat(e.getMessage(), is("Invalid Package name 'name with space'. This must be alphanumeric and can contain underscores and periods (however, it cannot start with a period). The maximum allowed length is 255 characters.")); } }
@Test public void shouldAddPackageDefinitionToGivenRepository() throws Exception { String repoId = "repo-id"; PackageRepository packageRepository = PackageRepositoryMother.create(repoId, "repo-name", "plugin-id", "1.0", new Configuration()); PackageDefinition existing = PackageDefinitionMother.create("pkg-1", "pkg1-name", new Configuration(), packageRepository); packageRepository.setPackages(new Packages(existing)); cruiseConfig.setPackageRepositories(new PackageRepositories(packageRepository)); Configuration configuration = new Configuration(); configuration.add(new ConfigurationProperty(new ConfigurationKey("key"), new ConfigurationValue("value"))); configuration.add(new ConfigurationProperty(new ConfigurationKey("key-with-no-value"), new ConfigurationValue(""))); PackageDefinition packageDefinition = PackageDefinitionMother.create(null, "pkg2-name", configuration, packageRepository); cruiseConfig.savePackageDefinition(packageDefinition); assertThat(cruiseConfig.getPackageRepositories().size(), is(1)); assertThat(cruiseConfig.getPackageRepositories().get(0).getId(), is(repoId)); assertThat(cruiseConfig.getPackageRepositories().get(0).getPackages().size(), is(2)); assertThat(cruiseConfig.getPackageRepositories().get(0).getPackages().get(0).getId(), is(existing.getId())); PackageDefinition createdPkgDef = cruiseConfig.getPackageRepositories().get(0).getPackages().get(1); assertThat(createdPkgDef.getId(), is(notNullValue())); assertThat(createdPkgDef.getConfiguration().getProperty("key"), is(Matchers.notNullValue())); assertThat(createdPkgDef.getConfiguration().getProperty("key-with-no-value"), is(nullValue())); }
@Test public void shouldNotAllowMultipleRepositoriesWithSameId() throws Exception { Configuration packageConfiguration = new Configuration(getConfigurationProperty("name", false, "go-agent")); Configuration repositoryConfiguration = new Configuration(getConfigurationProperty("url", false, "http://go")); CruiseConfig configToSave = new BasicCruiseConfig(); PackageRepository packageRepository = createPackageRepository("plugin-id-1", "version", "id", "name1", repositoryConfiguration, new Packages(new PackageDefinition("id", "name", packageConfiguration))); PackageRepository anotherPackageRepository = createPackageRepository("plugin-id-2", "version", "id", "name2", repositoryConfiguration, new Packages(new PackageDefinition("id", "name", packageConfiguration))); configToSave.setPackageRepositories(new PackageRepositories(packageRepository, anotherPackageRepository)); try { xmlWriter.write(configToSave, output, false); fail("should not have allowed two repositories with same id"); } catch (XsdValidationException e) { assertThat(e.getMessage(), anyOf( is("Duplicate unique value [id] declared for identity constraint of element \"repositories\"."), is("Duplicate unique value [id] declared for identity constraint \"uniqueRepositoryId\" of element \"repositories\".") )); } }
@Test public void shouldNotAllowMultiplePackagesWithSameId() throws Exception { Configuration packageConfiguration = new Configuration(getConfigurationProperty("name", false, "go-agent")); Configuration repositoryConfiguration = new Configuration(getConfigurationProperty("url", false, "http://go")); CruiseConfig configToSave = new BasicCruiseConfig(); PackageRepository packageRepository = createPackageRepository("plugin-id-1", "version", "id1", "name1", repositoryConfiguration, new Packages(new PackageDefinition("id", "name", packageConfiguration))); PackageRepository anotherPackageRepository = createPackageRepository("plugin-id-2", "version", "id2", "name2", repositoryConfiguration, new Packages(new PackageDefinition("id", "name", packageConfiguration))); configToSave.setPackageRepositories(new PackageRepositories(packageRepository, anotherPackageRepository)); try { xmlWriter.write(configToSave, output, false); fail("should not have allowed two package repositories with same id"); } catch (XsdValidationException e) { assertThat(e.getMessage(), anyOf( is("Duplicate unique value [id] declared for identity constraint of element \"cruise\"."), is("Duplicate unique value [id] declared for identity constraint \"uniquePackageId\" of element \"cruise\".") )); } }
@Test public void shouldNotAllowMultiplePackagesWithSameNameWithinARepo() throws Exception { Configuration packageConfiguration1 = new Configuration(getConfigurationProperty("name", false, "go-agent")); Configuration packageConfiguration2 = new Configuration(getConfigurationProperty("name2", false, "go-server")); Configuration repositoryConfiguration = new Configuration(getConfigurationProperty("url", false, "http://go")); CruiseConfig configToSave = new BasicCruiseConfig(); PackageRepository packageRepository = createPackageRepository("plugin-id", "version", "id", "name", repositoryConfiguration, new Packages(new PackageDefinition("id1", "name", packageConfiguration1), new PackageDefinition("id2", "name", packageConfiguration2))); configToSave.setPackageRepositories(new PackageRepositories(packageRepository)); try { xmlWriter.write(configToSave, output, false); fail("should not have allowed two repositories with same id"); } catch (GoConfigInvalidException e) { assertThat(e.getMessage(), is("You have defined multiple packages called 'name'. Package names are case-insensitive and must be unique within a repository.")); } }
@Test public void shouldNotAllowMultipleRepositoriesWithSameName() throws Exception { Configuration packageConfiguration = new Configuration(getConfigurationProperty("name", false, "go-agent")); Configuration repositoryConfiguration = new Configuration(getConfigurationProperty("url", false, "http://go")); CruiseConfig configToSave = new BasicCruiseConfig(); PackageRepository packageRepository = createPackageRepository("plugin-id", "version", "id1", "name", repositoryConfiguration, new Packages(new PackageDefinition("id1", "name1", packageConfiguration))); PackageRepository anotherPackageRepository = createPackageRepository("plugin-id", "version", "id2", "name", repositoryConfiguration, new Packages(new PackageDefinition("id2", "name2", packageConfiguration))); configToSave.setPackageRepositories(new PackageRepositories(packageRepository, anotherPackageRepository)); try { xmlWriter.write(configToSave, output, false); fail("should not have allowed two repositories with same id"); } catch (GoConfigInvalidException e) { assertThat(e.getMessage(), is("You have defined multiple repositories called 'name'. Repository names are case-insensitive and must be unique.")); } }
public static CruiseConfig configWithPackageRepo(String... ids) throws Exception { final CruiseConfig config = new BasicCruiseConfig(); PackageConfigurations configuration = new PackageConfigurations(); configuration.addConfiguration(new PackageConfiguration("key1")); configuration.addConfiguration(new PackageConfiguration("key2").with(PackageConfiguration.SECURE, true)); RepositoryMetadataStore.getInstance().addMetadataFor("plugin-1", configuration); for (String id : ids) { PackageRepository packageRepository = new PackageRepository(); packageRepository.setId(id); packageRepository.setName("name" + id); packageRepository.setPluginConfiguration(new PluginConfiguration("plugin-1", "1.0.0")); packageRepository.setPackages(new Packages(PackageDefinitionMother.create(id + "-pkg-1", packageRepository), PackageDefinitionMother.create(id + "-pkg-2", packageRepository))); GoCipher cipher = new GoCipher(); ConfigurationProperty p1 = new ConfigurationProperty(new ConfigurationKey("key1"), new ConfigurationValue("value1")); ConfigurationProperty p2 = new ConfigurationProperty(new ConfigurationKey("key2"), null, new EncryptedConfigurationValue(cipher.encrypt("value2")), cipher); packageRepository.setConfiguration(new Configuration(p1, p2)); config.setPackageRepositories(new PackageRepositories(packageRepository)); } return config; }