예제 #1
0
    def test_uploading_single_spliceserver(self):
        found = SpliceServer.objects()
        self.assertEquals(len(found), 0)

        server = SpliceServer()
        server.uuid = "Splice Server Test UUID-1"
        server.description = "Description data"
        server.hostname = "server.example.com"
        server.environment = "environment info"

        example = {"objects":[server]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for spliceserver import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post('/api/v1/spliceserver/', format='json', data=post_data,
            SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem)
        LOG.info("Response for spliceserver import: Status Code: %s, Response: %s" % (resp.status_code, resp))
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api saved the object as expected
        found = SpliceServer.objects()
        self.assertEquals(len(found), 1)
        self.assertEquals(found[0].uuid, server.uuid)
        self.assertEquals(found[0].description, server.description)
        self.assertEquals(found[0].hostname, server.hostname)
        self.assertEquals(found[0].environment, server.environment)
        self.assertIsNotNone(found[0].created)
        self.assertIsNotNone(found[0].updated)
예제 #2
0
    def test_uploading_duplicate(self):
        found = Product.objects()
        self.assertEquals(len(found), 0)

        p = Product()
        p.product_id = "a"
        p.name = "a_name"
        p.engineering_ids = ["1"]
        p.eng_prods = []
        p.attrs = {}
        p.created = "2012-12-07T15:35:54.448000"
        p.updated = "2012-12-07T15:35:54.448000"
        p.save()  # <- This is the big difference from test_uploading_single_product

        example = {"objects":[p]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for product import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post('/api/v1/product/', format='json', data=post_data,
                                        SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem)
        LOG.info("Status Code: %s, Response: %s" % (resp.status_code, resp))
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api saved the object as expected
        found = Product.objects()
        self.assertEquals(len(found), 1)
        self.assertEquals(found[0].product_id, p.product_id)
예제 #3
0
    def test_uploading_duplicate(self):
        found = Rules.objects()
        self.assertEquals(len(found), 0)
        version = "test version a.b"
        data = "here's the data"
        r = Rules()
        r.version = version
        r.data = data
        r.save()  # <-- main diff from above test_single....

        example = {"objects": [r]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for rules import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post(
            "/api/v1/rules/",
            format="json",
            data=post_data,
            SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem,
        )
        LOG.info("Status Code: %s, Response: %s" % (resp.status_code, resp))
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api saved the object as expected
        found = Rules.objects()
        self.assertEquals(len(found), 1)  # <-- ensure we didn't save a dup
        self.assertEquals(found[0].version, version)
        self.assertEquals(found[0].data, data)
예제 #4
0
    def test_upload_newer(self):
        ##
        # A newer version will be saved, but not it doesn't delete the older, this is diff than other API tests
        ##
        found = Rules.objects()
        self.assertEquals(len(found), 0)

        older = Rules()
        older.version = "0"
        older.data = "older data"
        older.save()

        version = "1"
        data = "here's the data"
        newer = Rules()
        newer.version = version
        newer.data = data

        example = {"objects": [newer]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for rules import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post(
            "/api/v1/rules/",
            format="json",
            data=post_data,
            SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem,
        )
        LOG.info("Status Code: %s, Response: %s" % (resp.status_code, resp))
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api saved the object as expected
        found = Rules.objects()
        self.assertEquals(len(found), 2)
        for item in found:
            self.assertIn(item.version, (newer.version, older.version))
예제 #5
0
    def test_upload_older(self):
        ##
        #  We want to accept an older upload, this is diff than most of the other API tests
        ##
        found = Rules.objects()
        self.assertEquals(len(found), 0)
        version = "1"
        data = "here's the data"
        newer = Rules()
        newer.version = version
        newer.data = data
        newer.save()  # <-- main diff from above test_single....

        older = Rules()
        older.version = "0"
        older.data = "older data"

        example = {"objects": [older]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for rules import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post(
            "/api/v1/rules/",
            format="json",
            data=post_data,
            SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem,
        )
        LOG.info("Status Code: %s, Response: %s" % (resp.status_code, resp))
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api saved the object as expected
        found = Rules.objects()
        self.assertEquals(len(found), 2)
        self.assertEquals(found[0].version, newer.version)
        self.assertEquals(found[0].data, newer.data)
예제 #6
0
    def test_uploading_single_pool(self):
        found = Pool.objects()
        self.assertEquals(len(found), 0)

        datestr = "2012-12-06T11:13:06.432367+00:00"
        p = Pool()
        p.uuid = "a"
        p.account = 1
        p.active = True
        p.contract = 1
        p.product_id = "something"
        p.product_name = "something_name"
        p.product_attributes = {}
        p.provided_products = []
        p.created = datestr
        p.start_date = datestr
        p.end_date = datestr
        p.updated = datestr
        p.quantity = 0

        example = {"objects":[p]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for pool import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post('/api/v1/pool/', format='json', data=post_data,
            SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem)
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api saved the object as expected
        found = Pool.objects()
        self.assertEquals(len(found), 1)
        self.assertEquals(found[0].uuid, p.uuid)
        self.assertEquals(found[0].account, p.account)
        self.assertEquals(found[0].active, p.active)
        self.assertEquals(found[0].contract, p.contract)
        self.assertEquals(found[0].product_id, p.product_id)
        self.assertEquals(found[0].product_name, p.product_name)
        self.assertEquals(found[0].product_attributes, p.product_attributes)
        self.assertEquals(found[0].provided_products, p.provided_products)
        self.assertEquals(found[0].quantity, p.quantity)
        self.assertEquals(type(found[0].created), datetime.datetime)
        self.assertEquals(str(found[0].created), "2012-12-06 11:13:06.432000+00:00")

        self.assertEquals(type(found[0].updated), datetime.datetime)
        self.assertEquals(str(found[0].updated), "2012-12-06 11:13:06.432000+00:00")

        self.assertEquals(type(found[0].start_date), datetime.datetime)
        self.assertEquals(str(found[0].start_date), "2012-12-06 11:13:06.432000+00:00")

        self.assertEquals(type(found[0].end_date), datetime.datetime)
        self.assertEquals(str(found[0].end_date), "2012-12-06 11:13:06.432000+00:00")
예제 #7
0
    def test_upload_newer_spliceserver(self):
        found = SpliceServer.objects()
        self.assertEquals(len(found), 0)
        # Create 'newer' server and save to DB
        orig_uuid = "Splice Server UUID"
        orig_description = "Original Description"
        orig_hostname = "Original.hostname.com"
        orig_environment = "Original environment"
        older = SpliceServer()
        older.uuid = orig_uuid
        older.description = orig_description
        older.hostname = orig_hostname
        older.environment = orig_environment
        older.created = "2011-01-01T11:13:06.432367"
        older.updated = "2012-12-01T11:13:06.432367"
        older.save()
        found = SpliceServer.objects()
        self.assertEquals(len(found), 1)

        # Create 'older' which is one month older than newer
        newer = SpliceServer()
        newer.uuid = orig_uuid
        newer.description = "Updated description"
        newer.hostname = "updated.server.example.com"
        newer.environment = "Updated environment info"
        newer.created = "2011-01-01T11:13:06.432367"
        newer.updated = "2012-12-31T11:13:06.432367+00:00"

        example = {"objects": [newer]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for spliceserver import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post('/api/v1/spliceserver/', format='json', data=post_data,
            SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem)
        LOG.info("Response for spliceserver import: Status Code: %s, Response: %s" % (resp.status_code, resp))
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api kept the 'newer' as is and ignored the older
        found = SpliceServer.objects()
        self.assertEquals(len(found), 1)
        self.assertEquals(found[0].uuid, orig_uuid)
        self.assertEquals(found[0].description, newer.description)
        self.assertEquals(found[0].hostname, newer.hostname)
        self.assertEquals(found[0].environment, newer.environment)
        self.assertEquals(str(found[0].updated), "2012-12-31 11:13:06.432000+00:00")
예제 #8
0
    def test_upload_newer_product(self):
        found = Product.objects()
        self.assertEquals(len(found), 0)
        # Create 'older' which is one month older than newer
        older = Product()
        older.product_id = "a"
        older.name = "old name"
        older.engineering_ids = ["old1"]
        older.eng_prods = [{"more old info": 1}]
        older.attrs = {"old": "info"}
        older.created = "2012-10-01T01:01:01.111111"
        older.updated = "2012-10-01T01:01:01.111111"
        older.save()
        found = Product.objects()
        self.assertEquals(len(found), 1)

        newer = Product()
        newer.product_id = "a"
        newer.name = "a_name"
        newer.engineering_ids = ["1"]
        newer.eng_prods = [{"new_info": 5}]
        newer.attrs = {}
        newer.created = "2012-12-07T15:35:54.448000"
        newer.updated = "2012-12-07T15:35:54.448000"

        example = {"objects":[newer]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for product import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post('/api/v1/product/', format='json', data=post_data,
                                        SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem)
        LOG.info("Status Code: %s, Response: %s" % (resp.status_code, resp))
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api saved the object as expected
        found = Product.objects()
        self.assertEquals(len(found), 1)
        self.assertEquals(found[0].product_id, newer.product_id)
        self.assertEquals(found[0].name, newer.name)
        self.assertEquals(found[0].engineering_ids, newer.engineering_ids)
        self.assertEquals(found[0].eng_prods, newer.eng_prods)
        self.assertIsNotNone(found[0].created)
        self.assertEquals(str(found[0].created), '2012-12-07 15:35:54.448000+00:00')
        self.assertIsNotNone(found[0].updated)
        self.assertEquals(str(found[0].updated), '2012-12-07 15:35:54.448000+00:00')
    def test_uploading_duplicate(self):
        found = MarketingProductUsage.objects()
        self.assertEquals(len(found), 0)

        datestr = "2012-12-06T11:13:06.432367"
        mpu = MarketingProductUsage()
	mpu.instance_identifier="instance-1"
	mpu.splice_server = "ss-1"
	mpu.date=datestr
        mpu.save()

        self.assertEquals(len(found), 1)
        example = {"objects":[mpu]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for marketing product usage import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post('/api/v1/marketingproductusage/', format='json', data=post_data,
                                        SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem)
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api saved the object as expected
        found = MarketingProductUsage.objects()
        self.assertEquals(len(found), 1)
        self.assertEquals(found[0].instance_identifier, mpu.instance_identifier)
예제 #10
0
    def test_uploading_single_rules(self):
        found = Rules.objects()
        self.assertEquals(len(found), 0)

        version = "test version a.b"
        data = "here's the data"
        r = Rules()
        r.version = version
        r.data = data

        example = {"objects":[r]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for rules import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post('/api/v1/rules/', format='json', data=post_data,
            SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem)
        LOG.info("Status Code: %s, Response: %s" % (resp.status_code, resp))
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api saved the object as expected
        found = Rules.objects()
        self.assertEquals(len(found), 1)
        self.assertEquals(found[0].version, version)
        self.assertEquals(found[0].data, data)
예제 #11
0
    def _request(self, request_type, method, body=None, gzip_body=False, decode_json=True):
        """

        @param request_type: HTTP request such as 'GET', 'PUT', 'POST'
        @param method: combined with the URL specified by 'handler' to form the full URL end point
        @param body: contents of this request
        @param gzip_body: optional boolean, default value 'false' leaves body as is
                          'true' will compress the body
        @return:
        """
        if self.username and self.password:
            # add the basic auth info to headers
            self.set_basic_auth()
        conn = self.__get_connection()
        url = self.handler + method
        headers = self.headers
        if body:
            # Use customized JSON encoder to handle Mongo objects
            body = utils.obj_to_json(body)
            if gzip_body:
                headers["content-encoding"] = "gzip"
                orig_body = body
                body = self._gzip_data(body)
                _LOG.info("Request to '%s' compressed body from %s bytes to %s bytes" % (url, len(orig_body), len(body)))
        _LOG.info("Sending '%s' to '%s' \n\twith headers '%s'" % (request_type, url, headers))
        conn.request(request_type, url, body=body, headers=headers)
        response = conn.getresponse()
        response_body = response.read()
        if response.getheader('content-encoding', '') == 'gzip':
            data = StringIO.StringIO(response_body)
            gzipper = gzip.GzipFile(fileobj=data)
            response_body = gzipper.read()
        _LOG.info("Received '%s' from '%s %s'" % (response.status, request_type, url))
        if response.status in [200, 202] and response_body:
            _LOG.info("Response body = \n'%s'" % (response_body))
            if decode_json:
                response_body = json.loads(response_body)
        return response.status, response_body
예제 #12
0
    def test_uploading_duplicate(self):
        #
        # Similar to test_uploading_single_pool, except for this test we will save the Pool object we create
        # then upload the same exact data and verify we have only 1 record in the DB...no duplicate should be present.
        #
        found = Pool.objects()
        self.assertEquals(len(found), 0)

        datestr = "2012-12-06T11:13:06.432367"
        p = Pool()
        p.uuid = "a"
        p.account = 1
        p.active = True
        p.contract = 1
        p.product_id = "something"
        p.product_name = "something_name"
        p.product_attributes = {}
        p.provided_products = []
        p.created = datestr
        p.start_date = datestr
        p.end_date = datestr
        p.updated = datestr
        p.quantity = 0
        p.save()

        self.assertEquals(len(found), 1)
        example = {"objects":[p]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for pool import with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post('/api/v1/pool/', format='json', data=post_data,
                                        SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem)
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api saved the object as expected
        found = Pool.objects()
        self.assertEquals(len(found), 1)
        self.assertEquals(found[0].uuid, p.uuid)
예제 #13
0
파일: api.py 프로젝트: splice/splice-server
 def pong(self):
     message = {"pong": str(datetime.now(tzutc()))}
     return http.HttpAccepted(utils.obj_to_json(message))
예제 #14
0
    parser.add_option('--password', action='store', default=default_password,
                      help="Password, default is %s" % default_password)
    (opts, args) = parser.parse_args()
    host = opts.host
    port = opts.port
    https = not opts.http
    username = opts.user
    password = opts.password

    if not host:
        print "Please re-run with --host"
        sys.exit(1)


    pools = get_pools(host, port, username, password, https)
    pools_json = utils.obj_to_json(pools, indent=2)
    pools_file = open("./pools.json", "w")
    try:
        pools_file.write("{\"objects\": ")
        pools_file.write(pools_json)
        pools_file.write("}")
    finally:
        pools_file.close()

    products = get_products(host, port, username, password, https)
    products_json = utils.obj_to_json(products, indent=2)
    products_file = open("./products.json", "w")
    try:
        products_file.write("{\"objects\": ")
        products_file.write(products_json)
        products_file.write("}")
예제 #15
0
    def test_upload_newer_spliceserver(self):
        found = Pool.objects()
        self.assertEquals(len(found), 0)
        # Create 'older' pool and save to DB
        older = Pool()
        older.uuid = "a"
        older.account = 20
        older.contract = 400
        older.active = False
        older.product_id = "something older"
        older.product_name = "something older name"
        older.product_attributes = {}
        older.provided_products = []
        older.created = "2012-11-06T11:13:06.432367+00:00"
        older.updated = "2012-11-06T11:13:06.432367+00:00" # 1 month older
        older.start_date = older.updated
        older.end_date = older.updated
        older.quantity = 1
        older.save()
        found = Pool.objects()
        self.assertEquals(len(found), 1)

        datestr = "2012-12-06T11:13:06.432367+00:00"
        newer = Pool()
        newer.uuid = older.uuid
        newer.account = 1
        newer.active = True
        newer.contract = 1
        newer.product_id = "something"
        newer.product_name = "something_name"
        newer.product_attributes = {}
        newer.provided_products = []
        newer.created = datestr
        newer.start_date = datestr
        newer.end_date = datestr
        newer.updated = datestr
        newer.quantity = 0

        example = {"objects": [newer]}
        post_data = utils.obj_to_json(example)
        LOG.info("Calling api for pool with post data: '%s'" % (post_data))
        resp = self.raw_api_client.post('/api/v1/pool/', format='json', data=post_data,
                                        SSL_CLIENT_CERT=self.expected_valid_splice_server_identity_pem)
        LOG.info("Status Code: %s, Response: %s" % (resp.status_code, resp))
        self.assertEquals(resp.status_code, 204)
        # Now check that the server api kept the 'newer' as is and ignored the older
        found = Pool.objects()
        self.assertEquals(len(found), 1)
        self.assertEquals(found[0].uuid, newer.uuid)
        self.assertEquals(found[0].active, newer.active)
        self.assertEquals(found[0].account, newer.account)
        self.assertEquals(found[0].contract, newer.contract)
        self.assertEquals(found[0].quantity, newer.quantity)
        self.assertEquals(found[0].product_id, newer.product_id)
        self.assertEquals(found[0].product_name, newer.product_name)
        self.assertEquals(found[0].product_attributes, newer.product_attributes)
        self.assertEquals(found[0].provided_products, newer.provided_products)
        self.assertEquals(str(found[0].created), "2012-12-06 11:13:06.432000+00:00")
        self.assertEquals(str(found[0].updated), "2012-12-06 11:13:06.432000+00:00")
        self.assertEquals(str(found[0].start_date), "2012-12-06 11:13:06.432000+00:00")
        self.assertEquals(str(found[0].end_date), "2012-12-06 11:13:06.432000+00:00")