def configure_admin(): remove_state("jenkins.configured.admin") api = Api() status_set("maintenance", "Configuring Jenkins public url") configuration = Configuration() needs_restart = configuration.set_url() if needs_restart: status_set("maintenance", "Restarting Jenkins") service_restart('jenkins') api.wait() status_set("maintenance", "Configuring proxy settings") configuration.configure_proxy() service_restart('jenkins') api.wait() status_set("maintenance", "Configuring admin user") users = Users() users.configure_admin() api.reload() api.wait() # Wait for the service to be fully up # Inform any extension that the username/password changed if get_state("extension.connected"): extension_relation = (RelationBase.from_state("extension.connected")) extension_relation.joined() set_state("jenkins.configured.admin")
class ConfigurationTest(CharmTest): def setUp(self): super(ConfigurationTest, self).setUp() self.useFixture(AptInstalledJenkins(self.fakes)) self.configuration = Configuration() def test_bootstrap(self): """ If it hasn't been done yet, the Jenkins configuration file gets generated. """ self.configuration.bootstrap() self.assertThat(paths.CONFIG_FILE, HasOwnership(123, 456)) self.assertThat( paths.CONFIG_FILE, FileContains(matcher=Contains("<numExecutors>1</numExecutors>"))) self.assertThat( paths.CONFIG_FILE, FileContains( matcher=Contains("<slaveAgentPort>48484</slaveAgentPort>")) ) self.assertEqual({8080, 48484}, self.fakes.juju.ports["TCP"]) def test_set_prefix1(self): # Case #1 - no previous config, no prefix, no change updated = self.configuration._set_prefix("") self.assertFalse(updated) def test_set_prefix2(self): # Case #2 - no previous config, a prefix, expected change updated = self.configuration._set_prefix("/jenkins") self.assertTrue(updated) def test_set_prefix3(self): # Case #3 - previous config, same prefix, no expected change self.configuration._set_prefix("/jenkins") updated = self.configuration._set_prefix("/jenkins") self.assertFalse(updated) def test_set_prefix4(self): # Case #4 - previous config, different prefix, expected change self.configuration._set_prefix("/jenkins") updated = self.configuration._set_prefix("/jenkins-alt") self.assertTrue(updated) def test_set_prefix5(self): # Case #5 - previous config, no prefix, expected change self.configuration._set_prefix("/jenkins") updated = self.configuration._set_prefix("") self.assertTrue(updated) def test_set_prefix6(self): # Case #6 - no config file, no expected change os.remove(paths.DEFAULTS_CONFIG_FILE) updated = self.configuration._set_prefix("/nothing") self.assertFalse(updated) def test_bad_jnlp_port(self): # Bootstrap should fail and return False if we set an invalid port orig_port = hookenv.config()["jnlp-port"] try: bad_port = 99999 hookenv.config()["jnlp-port"] = bad_port bootstrap = self.configuration.bootstrap() self.assertFalse(bootstrap) finally: # Reset our port hookenv.config()["jnlp-port"] = orig_port def test_set_url(self): needs_restart = self.configuration.set_url() self.assertFalse(needs_restart) self.assertThat(paths.LOCATION_CONFIG_FILE, HasOwnership(123, 456)) self.assertThat( paths.LOCATION_CONFIG_FILE, FileContains( matcher=Not(Contains("<jenkinsUrl></jenkinsUrl>")))) def test_set_url_not_empty(self): url = "http://jenkins.example.com" orig_public_url = hookenv.config()["public-url"] try: hookenv.config()["public-url"] = url self.configuration.set_url() self.assertThat( paths.LOCATION_CONFIG_FILE, FileContains( matcher=Contains("<jenkinsUrl>" + url + "</jenkinsUrl>"))) finally: hookenv.config()["public-url"] = orig_public_url def test_migrate(self): """ The legacy bootstrap flag file gets migrated to a local state flag. """ with open(paths.LEGACY_BOOTSTRAP_FLAG, "w") as fd: fd.write("") self.configuration.migrate() self.assertThat(paths.LEGACY_BOOTSTRAP_FLAG, Not(FileExists()))
class ConfigurationTest(CharmTest): def setUp(self): super(ConfigurationTest, self).setUp() self.useFixture(AptInstalledJenkins(self.fakes)) self.configuration = Configuration() def test_bootstrap(self): """ If it hasn't been done yet, the Jenkins configuration file gets generated. """ self.configuration.bootstrap() self.assertThat(paths.CONFIG_FILE, HasOwnership(123, 456)) self.assertThat( paths.CONFIG_FILE, FileContains(matcher=Contains("<numExecutors>1</numExecutors>"))) self.assertEqual({8080}, self.fakes.juju.ports["TCP"]) def test_set_prefix1(self): # Case #1 - no previous config, no prefix, no change updated = self.configuration._set_prefix("") self.assertFalse(updated) def test_set_prefix2(self): # Case #2 - no previous config, a prefix, expected change updated = self.configuration._set_prefix("/jenkins") self.assertTrue(updated) def test_set_prefix3(self): # Case #3 - previous config, same prefix, no expected change self.configuration._set_prefix("/jenkins") updated = self.configuration._set_prefix("/jenkins") self.assertFalse(updated) def test_set_prefix4(self): # Case #4 - previous config, different prefix, expected change self.configuration._set_prefix("/jenkins") updated = self.configuration._set_prefix("/jenkins-alt") self.assertTrue(updated) def test_set_prefix5(self): # Case #5 - previous config, no prefix, expected change self.configuration._set_prefix("/jenkins") updated = self.configuration._set_prefix("") self.assertTrue(updated) def test_set_prefix6(self): # Case #6 - no config file, no expected change os.remove(paths.DEFAULTS_CONFIG_FILE) updated = self.configuration._set_prefix("/nothing") self.assertFalse(updated) def test_set_url(self): needs_restart = self.configuration.set_url() self.assertFalse(needs_restart) self.assertThat(paths.LOCATION_CONFIG_FILE, HasOwnership(123, 456)) self.assertThat( paths.LOCATION_CONFIG_FILE, FileContains(matcher=Contains("<jenkinsUrl></jenkinsUrl>"))) def test_migrate(self): """ The legacy bootstrap flag file gets migrated to a local state flag. """ with open(paths.LEGACY_BOOTSTRAP_FLAG, "w") as fd: fd.write("") self.configuration.migrate() self.assertThat(paths.LEGACY_BOOTSTRAP_FLAG, Not(FileExists()))