def test_config_single_endpoint(self): servers = "255.255.255.255:443:/splice/api/v1/productusage" parser = self.create_config_parser(servers) data = config.get_reporting_config_info(cfg=parser) self.assertTrue(data.has_key("servers")) self.assertEquals(len(data["servers"]), 1) self.assertEquals(data["servers"][0][0], "255.255.255.255") self.assertEquals(data["servers"][0][1], 443) self.assertEquals(data["servers"][0][2], "/splice/api/v1/productusage")
def test_config_bad_data(self): raw_config_data = """ [reporting] servers = 255.255.255.255:/splice/api/v1/productusage 192.168.1.1:443:/splice/api/v1/productusage, test.example.com:443:/api/v1/productusage """ parser = ConfigParser.SafeConfigParser() parser.readfp(StringIO(raw_config_data)) caught = False try: data = config.get_reporting_config_info(cfg=parser) except BadConfigurationException, e: caught = True
def test_config_multiple_endpoints(self): # Test config parsing with bad values servers = "255.255.255.255:443:/splice/api/v1/productusage, 192.168.1.1:443:/splice/api/v1/productusage, test.example.com:443:/api/v1/productusage" parser = self.create_config_parser(servers) data = config.get_reporting_config_info(cfg=parser) self.assertTrue(data.has_key("servers")) self.assertEquals(len(data["servers"]), 3) self.assertEquals(data["servers"][0][0], "255.255.255.255") self.assertEquals(data["servers"][0][1], 443) self.assertEquals(data["servers"][0][2], "/splice/api/v1/productusage") self.assertEquals(data["servers"][1][0], "192.168.1.1") self.assertEquals(data["servers"][1][1], 443) self.assertEquals(data["servers"][1][2], "/splice/api/v1/productusage") self.assertEquals(data["servers"][2][0], "test.example.com") self.assertEquals(data["servers"][2][1], 443) self.assertEquals(data["servers"][2][2], "/api/v1/productusage")
def upload_product_usage_data(cfg=None): """ @param cfg: optional argument to use a special instance of ConfigParser to determine values, mainly used for unit testing, @return: None """ cfg_info = config.get_reporting_config_info(cfg) if not cfg_info["servers"]: _LOG.info("No servers are configured to upload product usage data to") return limit = None if cfg_info["limit_per_call"]: limit = cfg_info["limit_per_call"] for server in cfg_info["servers"]: try: (addr, port, url) = server _process_product_usage_upload(addr, port, url, limit) _process_splice_server_metadata_upload(addr, port, url) except Exception, e: _LOG.exception("Caught exception when processing upload to (%s, %s, %s)" % (addr, port, url)) _LOG.info("Related configuration is: '%s'" % (cfg_info))
if __name__ == "__main__": from datetime import datetime from dateutil.tz import tzutc from splice.common.models import ProductUsage # Create a dummy product usage object pu = ProductUsage() pu.consumer = "test_consumer" pu.splice_server = "test_splice_server" pu.instance_identifier = "test_instance_identifier" pu.allowed_product_info = ["1", "2", "3", "4"] pu.unallowed_product_info = ["100"] pu.facts = {"tbd": "values"} pu.date = datetime.now(tzutc()) config.init(settings.SPLICE_CONFIG_FILE) cfg = config.get_reporting_config_info() if cfg["servers"]: remote_server = cfg["servers"][0] else: remote_server = ("127.0.0.1", "443", "/splice/api/v1/productusage/") host = remote_server[0] port = remote_server[1] url = remote_server[2] status, data = upload_product_usage_data(host, port, url, [pu]) print "---\n\n" print "Response:\n Status Code: %s\n%s" % (status, data)