def test_force_reload_works(self): # original config conf_args = [ "-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws" ] rc = configure.main(conf_args) self.assertEqual(rc, 0) logging_file = os.path.join(self.test_base_path, "etc/logging.yaml") plugin_file = os.path.join(self.test_base_path, "etc/plugin.conf") # customer customizes logging and plugin logging_write = open(logging_file, "w") logging_write.write("Hello") logging_write.close() plugin_write = open(plugin_file, "w") plugin_write.write("Hello") plugin_write.close() # reconfig conf_args = [ "-r", os.path.join(self.test_base_path, "etc/agent.conf"), "-R" ] rc = configure.main(conf_args) self.assertEqual(rc, 0) with open(logging_file, "r") as f: self.assertNotEqual("Hello", f.readline()) with open(plugin_file, "r") as f: self.assertNotEqual("Hello", f.readline())
def test_force_reload_works(self): # original config conf_args = ["-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws"] rc = configure.main(conf_args) self.assertEqual(rc, 0) logging_file = os.path.join(self.test_base_path, "etc/logging.yaml") plugin_file = os.path.join(self.test_base_path, "etc/plugin.conf") # customer customizes logging and plugin logging_write = open(logging_file, "w") logging_write.write("Hello") logging_write.close() plugin_write = open(plugin_file, "w") plugin_write.write("Hello") plugin_write.close() # reconfig conf_args = ["-r", os.path.join(self.test_base_path, "etc/agent.conf"), "-R"] rc = configure.main(conf_args) self.assertEqual(rc, 0) with open(logging_file, "r") as f: self.assertNotEqual("Hello", f.readline()) with open(plugin_file, "r") as f: self.assertNotEqual("Hello", f.readline())
def test_configure_ossec_alert_threshold_change(self): conf1 = config.AgentConfig([]) def check_version(conf): unsupported_platform_version = [("ubuntu", "10.04"), ("debian", "6.0")] for p, v in unsupported_platform_version: if conf.platform_name == p and conf.platform_version.startswith( v): return True return False if check_version(conf1): return conf_args = [ "-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws", "--intrusion-detection-ossec", "true", "--ids-alert-threshold", "5" ] rc = configure.main(conf_args) self.assertEqual(rc, 0, msg="Failed for " + conf1.platform_name + " : " + conf1.platform_version) conf = config.AgentConfig( [os.path.join(self.test_base_path, "etc/agent.conf")]) self.assertTrue(conf.intrusion_detection_ossec) self.assertEqual(conf.intrusion_detection_alert_threshold, 5)
def test_configure_ossec_alert_threshold_change(self): conf1 = config.AgentConfig([]) def check_version(conf): unsupported_platform_version = [("ubuntu", "10.04"), ("debian", "6.0")] for p, v in unsupported_platform_version: if conf.platform_name == p and conf.platform_version.startswith(v): return True return False if check_version(conf1): return conf_args = ["-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws", "--intrusion-detection-ossec", "true", "--ids-alert-threshold", "5"] rc = configure.main(conf_args) self.assertEqual(rc, 0, msg="Failed for " + conf1.platform_name + " : " + conf1.platform_version) conf = config.AgentConfig([os.path.join( self.test_base_path, "etc/agent.conf")]) self.assertTrue(conf.intrusion_detection_ossec) self.assertEqual(conf.intrusion_detection_alert_threshold, 5)
def test_interactive_configure(self, patch_cert_check): def _l_get_input(prompt): return "0" patch_cert_check.return_value = True url = "ws://someplace.com:5434/path" with mock.patch('sys.stdin'): sys.stdin.readline.return_value = url func = dcm.agent.cmd.configure._get_input try: dcm.agent.cmd.configure._get_input = _l_get_input conf_args = ["-p", self.test_base_path, "-C", "ws", "-i"] rc = configure.main(conf_args) finally: dcm.agent.cmd.configure._get_input = func self.assertEqual(rc, 0) parser = configparser.SafeConfigParser() parser.read(os.path.join(self.test_base_path, "etc", "agent.conf")) agentmanager_url = parser.get("connection", "agentmanager_url") self.assertEqual(agentmanager_url, url) cloud_type = parser.get("cloud", "type") self.assertEqual(cloud_type, configure.cloud_choices[0]) cert = parser.get("connection", "allow_unknown_certs") self.assertEqual(cert, "True")
def test_config_works_bad_location(self): conf_args = [ "-c", "aMazOn", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws", "--install-extras", "--extra-package-location", "http://nogood.something.x/" ] rc = configure.main(conf_args) self.assertNotEqual(rc, 0)
def test_logging_plugin_not_changed_w_reconfig(self): # original config conf_args = [ "-v", "-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws" ] rc = configure.main(conf_args) self.assertEqual(rc, 0) logging_file = os.path.join(self.test_base_path, "etc/logging.yaml") plugin_file = os.path.join(self.test_base_path, "etc/plugin.conf") # customer customizes logging and plugin logging_data = """ --- version: 1 disable_existing_loggers: False formatters: simple: format: "%(levelname)s %(asctime)s [%(name)s] %(filename)s:%(lineno)d [(REQUEST=%(dcm_request_id)s)] %(message)s" todcm: format: "%(asctime)s [%(name)s] %(filename)s:%(lineno)d [(REQUEST=%(dcm_request_id)s)] %(message)s" wire: format: "[%(asctime)s] %(message)s" """ logging_write = open(logging_file, "w") logging_write.write(logging_data) logging_write.close() plugin_write = open(plugin_file, "w") plugin_write.write("Hello") plugin_write.close() # reconfig conf_args = [ "-v", "-r", os.path.join(self.test_base_path, "etc/agent.conf") ] rc = configure.main(conf_args) self.assertEqual(rc, 0) with open(logging_file, "r") as f: self.assertEqual(logging_data, f.read()) with open(plugin_file, "r") as f: self.assertEqual("Hello", f.readline())
def test_logging_plugin_not_changed_w_reconfig(self): # original config conf_args = ["-v", "-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws"] rc = configure.main(conf_args) self.assertEqual(rc, 0) logging_file = os.path.join(self.test_base_path, "etc/logging.yaml") plugin_file = os.path.join(self.test_base_path, "etc/plugin.conf") # customer customizes logging and plugin logging_data = """ --- version: 1 disable_existing_loggers: False formatters: simple: format: "%(levelname)s %(asctime)s [%(name)s] %(filename)s:%(lineno)d [(REQUEST=%(dcm_request_id)s)] %(message)s" todcm: format: "%(asctime)s [%(name)s] %(filename)s:%(lineno)d [(REQUEST=%(dcm_request_id)s)] %(message)s" wire: format: "[%(asctime)s] %(message)s" """ logging_write = open(logging_file, "w") logging_write.write(logging_data) logging_write.close() plugin_write = open(plugin_file, "w") plugin_write.write("Hello") plugin_write.close() # reconfig conf_args = ["-v", "-r", os.path.join(self.test_base_path, "etc/agent.conf")] rc = configure.main(conf_args) self.assertEqual(rc, 0) with open(logging_file, "r") as f: self.assertEqual(logging_data, f.read()) with open(plugin_file, "r") as f: self.assertEqual("Hello", f.readline())
def test_all_cloud_reconfigure(self): url = 'http://someplace.com:2342/hello' conf_args = ["-p", self.test_base_path, "-c", "Azure", "-u", url] rc = configure.main(conf_args) self.assertEqual(rc, 0) conf_args = ["-p", self.test_base_path, "-r", os.path.join(self.test_base_path, "etc", "agent.conf"), "-u", url] rc = configure.main(conf_args) self.assertEqual(rc, 0) parser = configparser.SafeConfigParser() parser.read(os.path.join(self.test_base_path, "etc", "agent.conf")) agentmanager_url = parser.get("connection", "agentmanager_url") self.assertEqual(agentmanager_url, url)
def test_all_cloud_reconfigure(self): url = 'http://someplace.com:2342/hello' conf_args = ["-p", self.test_base_path, "-c", "Azure", "-u", url] rc = configure.main(conf_args) self.assertEqual(rc, 0) conf_args = [ "-p", self.test_base_path, "-r", os.path.join(self.test_base_path, "etc", "agent.conf"), "-u", url ] rc = configure.main(conf_args) self.assertEqual(rc, 0) parser = configparser.SafeConfigParser() parser.read(os.path.join(self.test_base_path, "etc", "agent.conf")) agentmanager_url = parser.get("connection", "agentmanager_url") self.assertEqual(agentmanager_url, url)
def test_config_works_bad_location(self): conf_args = ["-c", "aMazOn", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws", "--install-extras", "--extra-package-location", "http://nogood.something.x/"] rc = configure.main(conf_args) self.assertNotEqual(rc, 0)
def test_config_works_with_install_extras(self): if 'DCM_AGENT_TEST_EXTRA_PACKAGE_URL' not in os.environ: raise unittest.SkipTest("No extras package known, skipping") conf_args = [ "-c", "aMazOn", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws", "--install-extras", "--extra-package-location", os.environ['DCM_AGENT_TEST_EXTRA_PACKAGE_URL'] ] rc = configure.main(conf_args) self.assertEqual(rc, 0)
def test_default_chef_client(self): conf_args = ["-c", "aMazOn", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws"] rc = configure.main(conf_args) self.assertEqual(rc, 0) parser = configparser.ConfigParser() parser.read(os.path.join(self.test_base_path, "etc", "agent.conf")) chef_client_version = parser.get("configuration_management", "chef_client_version") self.assertEqual(chef_client_version, "11.16.4")
def test_cloud_name_case(self): conf_args = ["-c", "aMazOn", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws"] rc = configure.main(conf_args) self.assertEqual(rc, 0) parser = configparser.SafeConfigParser() parser.read(os.path.join(self.test_base_path, "etc", "agent.conf")) cloud_from_file = parser.get("cloud", "type") self.assertEqual(cloudmetadata.CLOUD_TYPES.Amazon, cloud_from_file)
def test_cloud_name_case(self): conf_args = [ "-c", "aMazOn", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws" ] rc = configure.main(conf_args) self.assertEqual(rc, 0) parser = configparser.SafeConfigParser() parser.read(os.path.join(self.test_base_path, "etc", "agent.conf")) cloud_from_file = parser.get("cloud", "type") self.assertEqual(cloudmetadata.CLOUD_TYPES.Amazon, cloud_from_file)
def test_config_works_with_install_extras(self): if 'DCM_AGENT_TEST_EXTRA_PACKAGE_URL' not in os.environ: raise unittest.SkipTest("No extras package known, skipping") conf_args = ["-c", "aMazOn", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws", "--install-extras", "--extra-package-location", os.environ['DCM_AGENT_TEST_EXTRA_PACKAGE_URL']] rc = configure.main(conf_args) self.assertEqual(rc, 0)
def test_config_chef_client(self): conf_args = [ "-c", "aMazOn", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws", "--chef-client-version", "12.6" ] rc = configure.main(conf_args) self.assertEqual(rc, 0) parser = configparser.ConfigParser() parser.read(os.path.join(self.test_base_path, "etc", "agent.conf")) chef_client_version = parser.get("configuration_management", "chef_client_version") self.assertEqual(chef_client_version, "12.6")
def test_confs_created_if_not_exist(self): # original config conf_args = [ "-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws" ] rc = configure.main(conf_args) self.assertEqual(rc, 0) logging_file = os.path.join(self.test_base_path, "etc/logging.yaml") plugin_file = os.path.join(self.test_base_path, "etc/plugin.conf") #delete files after install and config os.remove(logging_file) os.remove(plugin_file) self.assertFalse(os.path.isfile(logging_file)) self.assertFalse(os.path.isfile(plugin_file)) #redo original config conf_args = ["-r", os.path.join(self.test_base_path, "etc/agent.conf")] rc = configure.main(conf_args) self.assertEqual(rc, 0) self.assertTrue(os.path.isfile(plugin_file)) self.assertTrue(os.path.isfile(logging_file))
def test_confs_created_if_not_exist(self): # original config conf_args = ["-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws"] rc = configure.main(conf_args) self.assertEqual(rc, 0) logging_file = os.path.join(self.test_base_path, "etc/logging.yaml") plugin_file = os.path.join(self.test_base_path, "etc/plugin.conf") #delete files after install and config os.remove(logging_file) os.remove(plugin_file) self.assertFalse(os.path.isfile(logging_file)) self.assertFalse(os.path.isfile(plugin_file)) #redo original config conf_args = ["-r", os.path.join(self.test_base_path, "etc/agent.conf")] rc = configure.main(conf_args) self.assertEqual(rc, 0) self.assertTrue(os.path.isfile(plugin_file)) self.assertTrue(os.path.isfile(logging_file))
def test_dir_configure(self): conf_args = ["-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws"] rc = configure.main(conf_args) self.assertEqual(rc, 0) subdirs_to_check = ["secure", "etc", "home", "logs", "bin", "etc/agent.conf", "etc/logging.yaml", "etc/plugin.conf"] for d in subdirs_to_check: d = os.path.join(self.test_base_path, d) self.assertTrue(os.path.exists(d), d)
def _write_conf(self): run_as_user = getpass.getuser() test_base_path = tempfile.mkdtemp() conf_args = ["-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", test_base_path, "-C", "ws", "-m", os.path.join(test_base_path, "mount"), "-t", os.path.join(test_base_path, "tmp"), "-U", run_as_user, "-l", "/tmp/agent_test_log.log"] rc = configure.main(conf_args) if rc != 0: raise Exception("We could not configure the test env") return test_base_path
def setUpClass(cls): cls.run_as_user = getpass.getuser() test_utils.connect_to_debugger() cls.test_base_path = tempfile.mkdtemp() cls.test_conf_path = os.path.join(cls.test_base_path, "etc", "agent.conf") conf_args = [ "-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", cls.test_base_path, "-t", os.path.join(cls.test_base_path, "tmp"), "-C", "ws", "-U", cls.run_as_user, "-l", "/tmp/agent_status_test.log" ] rc = configure.main(conf_args) if rc != 0: raise Exception("We could not configure the test env")
def setUpClass(cls): cls.run_as_user = getpass.getuser() test_utils.connect_to_debugger() cls.test_base_path = tempfile.mkdtemp() cls.test_conf_path = os.path.join( cls.test_base_path, "etc", "agent.conf") conf_args = ["-c", "Other", "-u", "http://doesntmatter.org/ws", "-p", cls.test_base_path, "-t", os.path.join(cls.test_base_path, "tmp"), "-C", "ws", "-U", cls.run_as_user, "-l", "/tmp/agent_status_test.log"] rc = configure.main(conf_args) if rc != 0: raise Exception("We could not configure the test env")
def test_dir_configure(self): conf_args = [ "-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", self.test_base_path, "-C", "ws" ] rc = configure.main(conf_args) self.assertEqual(rc, 0) subdirs_to_check = [ "secure", "etc", "home", "logs", "bin", "etc/agent.conf", "etc/logging.yaml", "etc/plugin.conf" ] for d in subdirs_to_check: d = os.path.join(self.test_base_path, d) self.assertTrue(os.path.exists(d), d)
def setUpClass(cls): cls.run_as_user = getpass.getuser() test_utils.connect_to_debugger() cls.test_base_path = tempfile.mkdtemp() cls.test_conf_path = os.path.join( cls.test_base_path, "etc", "agent.conf") conf_args = ["-c", "Other", "-u", "http://doesntmatter.org/ws", "-p", cls.test_base_path, "-t", os.path.join(cls.test_base_path, "tmp"), "-C", "ws", "-U", cls.run_as_user, "-l", "/tmp/agent_status_test.log", "--intrusion-detection-ossec", "true", "--install-extras", "--extra-package-location", os.environ['DCM_AGENT_TEST_EXTRA_PACKAGE_URL']] rc = configure.main(conf_args) if rc != 0: raise Exception("We could not configure the test env")
def setUpClass(cls): test_utils.connect_to_debugger() cls.run_as_user = getpass.getuser() cls.test_base_path = tempfile.mkdtemp() conf_args = [ "-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", cls.test_base_path, "-t", os.path.join(cls.test_base_path, "tmp"), "-C", "success_tester", "-U", cls.run_as_user, "-l", "/tmp/agent_test_log.log" ] if 'DCM_AWS_EXTRAS_BUCKET' in os.environ: extras_repo = ("http://" + os.environ['DCM_AWS_EXTRAS_BUCKET'] + ".s3.amazonaws.com") conf_args.append("--extra-package-location") conf_args.append(extras_repo) if 'DCM_INSTALL_EXTRAS' in os.environ: conf_args.append("--install-extras") rc = configure.main(conf_args) if rc != 0: raise Exception("We could not configure the test env")
def setUpClass(cls): test_utils.connect_to_debugger() cls.run_as_user = getpass.getuser() cls.test_base_path = tempfile.mkdtemp() conf_args = ["-c", "Amazon", "-u", "http://doesntmatter.org/ws", "-p", cls.test_base_path, "-t", os.path.join(cls.test_base_path, "tmp"), "-C", "success_tester", "-U", cls.run_as_user, "-l", "/tmp/agent_test_log.log"] if 'DCM_AWS_EXTRAS_BUCKET' in os.environ: extras_repo = ("http://" + os.environ['DCM_AWS_EXTRAS_BUCKET'] + ".s3.amazonaws.com") conf_args.append("--extra-package-location") conf_args.append(extras_repo) if 'DCM_INSTALL_EXTRAS' in os.environ: conf_args.append("--install-extras") rc = configure.main(conf_args) if rc != 0: raise Exception("We could not configure the test env")
def test_all_cloud_configure(self): for cloud in configure.cloud_choices: if cloud.lower() == "unknown": continue conf_args = ["-p", self.test_base_path, "-c", cloud] rc = configure.main(conf_args) self.assertEqual(rc, 0) parser = configparser.SafeConfigParser() parser.read(os.path.join(self.test_base_path, "etc", "agent.conf")) cloud_from_file = parser.get("cloud", "type") self.assertEqual(cloud_from_file.lower(), cloud.lower()) try: cloud_from_file = parser.get("cloud", "metadata_url") except: cloud_from_file = None if cloud == "Amazon": mu = "http://169.254.169.254/latest/meta-data/" self.assertEqual(mu, cloud_from_file) elif cloud == "OpenStack": mu = ("http://169.254.169.254/openstack/2012-08-10/" "meta_data.json") self.assertEqual(mu, cloud_from_file) elif cloud == "Google": mu = "http://metadata.google.internal/computeMetadata/v1" self.assertEqual(mu, cloud_from_file) elif cloud == "DigitalOcean": mu = "http://169.254.169.254/metadata/v1" self.assertEqual(mu, cloud_from_file) elif cloud == "CloudStack": self.assertIsNone(cloud_from_file) elif cloud == "CloudStack3": self.assertIsNone(cloud_from_file) else: self.assertIsNone(cloud_from_file)