Exemplo n.º 1
0
    def test_zone_select(self):
        key = 'c286696d887c9aa0611bbb3e2025a45a'
        self.flags(build_plan_encryption_key=key)
        self.stubs.Set(api, 'select', zone_select)

        req = webob.Request.blank('/v1.0/zones/select')
        req.method = 'POST'
        req.headers["Content-Type"] = "application/json"
        # Select queries end up being JSON encoded twice.
        # Once to a string and again as an HTTP POST Body
        req.body = json.dumps(json.dumps({}))

        res = req.get_response(fakes.wsgi_app())
        res_dict = json.loads(res.body)
        self.assertEqual(res.status_int, 200)

        self.assertTrue('weights' in res_dict)

        for item in res_dict['weights']:
            blob = item['blob']
            decrypt = crypto.decryptor(FLAGS.build_plan_encryption_key)
            secret_item = json.loads(decrypt(blob))
            found = False
            for original_item in GLOBAL_BUILD_PLAN:
                if original_item['name'] != secret_item['name']:
                    continue
                found = True
                for key in ('weight', 'ip', 'zone'):
                    self.assertEqual(secret_item[key], original_item[key])

            self.assertTrue(found)
            self.assertEqual(len(item), 2)
            self.assertTrue('weight' in item)
Exemplo n.º 2
0
    def test_zone_select(self):
        key = 'c286696d887c9aa0611bbb3e2025a45a'
        self.flags(build_plan_encryption_key=key)
        self.stubs.Set(api, 'select', zone_select)

        # Select queries end up being JSON encoded twice.
        # Once to a string and again as an HTTP POST Body
        body = json.dumps({})

        req = fakes.HTTPRequest.blank('/v2/fake/zones/select')
        res_dict = self.controller.select(req, body)

        self.assertTrue('weights' in res_dict)

        for item in res_dict['weights']:
            blob = item['blob']
            decrypt = crypto.decryptor(FLAGS.build_plan_encryption_key)
            secret_item = json.loads(decrypt(blob))
            found = False
            for original_item in GLOBAL_BUILD_PLAN:
                if original_item['name'] != secret_item['name']:
                    continue
                found = True
                for key in ('weight', 'ip', 'zone'):
                    self.assertEqual(secret_item[key], original_item[key])

            self.assertTrue(found)
            self.assertEqual(len(item), 2)
            self.assertTrue('weight' in item)
Exemplo n.º 3
0
    def test_zone_select(self):
        key = 'c286696d887c9aa0611bbb3e2025a45a'
        self.flags(build_plan_encryption_key=key)
        self.stubs.Set(api, 'select', zone_select)

        # Select queries end up being JSON encoded twice.
        # Once to a string and again as an HTTP POST Body
        body = json.dumps({})

        req = fakes.HTTPRequest.blank('/v2/fake/zones/select')
        res_dict = self.controller.select(req, body)

        self.assertTrue('weights' in res_dict)

        for item in res_dict['weights']:
            blob = item['blob']
            decrypt = crypto.decryptor(FLAGS.build_plan_encryption_key)
            secret_item = json.loads(decrypt(blob))
            found = False
            for original_item in GLOBAL_BUILD_PLAN:
                if original_item['name'] != secret_item['name']:
                    continue
                found = True
                for key in ('weight', 'ip', 'zone'):
                    self.assertEqual(secret_item[key], original_item[key])

            self.assertTrue(found)
            self.assertEqual(len(item), 2)
            self.assertTrue('weight' in item)
Exemplo n.º 4
0
    def test_zone_select(self):
        FLAGS.build_plan_encryption_key = 'c286696d887c9aa0611bbb3e2025a45a'
        self.stubs.Set(api, 'select', zone_select)

        req = webob.Request.blank('/v1.0/zones/select')

        res = req.get_response(fakes.wsgi_app())
        res_dict = json.loads(res.body)
        self.assertEqual(res.status_int, 200)

        self.assertTrue('weights' in res_dict)

        for item in res_dict['weights']:
            blob = item['blob']
            decrypt = crypto.decryptor(FLAGS.build_plan_encryption_key)
            secret_item = json.loads(decrypt(blob))
            found = False
            for original_item in GLOBAL_BUILD_PLAN:
                if original_item['name'] != secret_item['name']:
                    continue
                found = True
                for key in ('weight', 'ip', 'zone'):
                    self.assertEqual(secret_item[key], original_item[key])

            self.assertTrue(found)
            self.assertEqual(len(item), 2)
            self.assertTrue('weight' in item)
Exemplo n.º 5
0
    def test_zone_select(self):
        FLAGS.build_plan_encryption_key = 'c286696d887c9aa0611bbb3e2025a45a'
        self.stubs.Set(api, 'select', zone_select)

        req = webob.Request.blank('/v1.0/zones/select')
        req.method = 'POST'
        req.headers["Content-Type"] = "application/json"
        # Select queries end up being JSON encoded twice.
        # Once to a string and again as an HTTP POST Body
        req.body = json.dumps(json.dumps({}))

        res = req.get_response(fakes.wsgi_app())
        res_dict = json.loads(res.body)
        self.assertEqual(res.status_int, 200)

        self.assertTrue('weights' in res_dict)

        for item in res_dict['weights']:
            blob = item['blob']
            decrypt = crypto.decryptor(FLAGS.build_plan_encryption_key)
            secret_item = json.loads(decrypt(blob))
            found = False
            for original_item in GLOBAL_BUILD_PLAN:
                if original_item['name'] != secret_item['name']:
                    continue
                found = True
                for key in ('weight', 'ip', 'zone'):
                    self.assertEqual(secret_item[key], original_item[key])

            self.assertTrue(found)
            self.assertEqual(len(item), 2)
            self.assertTrue('weight' in item)
 def _decrypt_blob(self, blob):
     """Returns the decrypted blob or None if invalid. Broken out
     for testing."""
     decryptor = crypto.decryptor(FLAGS.build_plan_encryption_key)
     try:
         json_entry = decryptor(blob)
         return json.dumps(entry)
     except M2Crypto.EVP.EVPError:
         pass
     return None
Exemplo n.º 7
0
 def _decrypt_blob(self, blob):
     """Returns the decrypted blob or None if invalid. Broken out
     for testing."""
     decryptor = crypto.decryptor(FLAGS.build_plan_encryption_key)
     try:
         json_entry = decryptor(blob)
         return json.dumps(json_entry)
     except M2Crypto.EVP.EVPError:
         pass
     return None
Exemplo n.º 8
0
    def test_encrypt_decrypt(self):
        key = 'c286696d887c9aa0611bbb3e2025a45a'
        plain_text = "The quick brown fox jumped over the lazy dog."

        # No IV supplied (all 0's)
        encrypt = crypto.encryptor(key)
        cipher_text = encrypt(plain_text)
        self.assertNotEquals(plain_text, cipher_text)

        decrypt = crypto.decryptor(key)
        plain = decrypt(cipher_text)

        self.assertEquals(plain_text, plain)
Exemplo n.º 9
0
    def test_encrypt_decrypt(self):
        key = 'c286696d887c9aa0611bbb3e2025a45a'
        plain_text = "The quick brown fox jumped over the lazy dog."

        # No IV supplied (all 0's)
        encrypt = crypto.encryptor(key)
        cipher_text = encrypt(plain_text)
        self.assertNotEquals(plain_text, cipher_text)

        decrypt = crypto.decryptor(key)
        plain = decrypt(cipher_text)

        self.assertEquals(plain_text, plain)
Exemplo n.º 10
0
    def _make_weighted_host_from_blob(self, blob):
        """Returns the decrypted blob as a WeightedHost object
        or None if invalid. Broken out for testing.
        """
        decryptor = crypto.decryptor(FLAGS.build_plan_encryption_key)
        json_entry = decryptor(blob)

        # Extract our WeightedHost values
        wh_dict = json.loads(json_entry)
        host = wh_dict.get('host', None)
        blob = wh_dict.get('blob', None)
        zone = wh_dict.get('zone', None)
        return least_cost.WeightedHost(wh_dict['weight'],
                    host_state=host_manager.HostState(host, 'compute'),
                    blob=blob, zone=zone)
Exemplo n.º 11
0
    def test_encrypt_decrypt(self):
        key = 'c286696d887c9aa0611bbb3e2025a45a'
        plain_text = "The quick brown fox jumped over the lazy dog."

        # No IV supplied (all 0's)
        encrypt = crypto.encryptor(key)
        cipher_text = encrypt(plain_text)
        self.assertNotEquals(plain_text, cipher_text)

        decrypt = crypto.decryptor(key)
        plain = decrypt(cipher_text)

        self.assertEquals(plain_text, plain)

        # IV supplied ...
        iv = '562e17996d093d28ddb3ba695a2e6f58'
        encrypt = crypto.encryptor(key, iv)
        cipher_text = encrypt(plain_text)
        self.assertNotEquals(plain_text, cipher_text)

        decrypt = crypto.decryptor(key, iv)
        plain = decrypt(cipher_text)

        self.assertEquals(plain_text, plain)
Exemplo n.º 12
0
    def test_encrypt_decrypt(self):
        key = 'c286696d887c9aa0611bbb3e2025a45a'
        plain_text = "The quick brown fox jumped over the lazy dog."

        # No IV supplied (all 0's)
        encrypt = crypto.encryptor(key)
        cipher_text = encrypt(plain_text)
        self.assertNotEquals(plain_text, cipher_text)

        decrypt = crypto.decryptor(key)
        plain = decrypt(cipher_text)

        self.assertEquals(plain_text, plain)

        # IV supplied ...
        iv = '562e17996d093d28ddb3ba695a2e6f58'
        encrypt = crypto.encryptor(key, iv)
        cipher_text = encrypt(plain_text)
        self.assertNotEquals(plain_text, cipher_text)

        decrypt = crypto.decryptor(key, iv)
        plain = decrypt(cipher_text)

        self.assertEquals(plain_text, plain)
Exemplo n.º 13
0
    def _make_weighted_host_from_blob(self, blob):
        """Returns the decrypted blob as a WeightedHost object
        or None if invalid. Broken out for testing.
        """
        decryptor = crypto.decryptor(FLAGS.build_plan_encryption_key)
        try:
            json_entry = decryptor(blob)
            # Extract our WeightedHost values
            wh_dict = json.loads(json_entry)
            host = wh_dict.get("host", None)
            blob = wh_dict.get("blob", None)
            zone = wh_dict.get("zone", None)
            return least_cost.WeightedHost(wh_dict["weight"], host=host, blob=blob, zone=zone)

        except M2Crypto.EVP.EVPError:
            raise InvalidBlob()
Exemplo n.º 14
0
    def _make_weighted_host_from_blob(self, blob):
        """Returns the decrypted blob as a WeightedHost object
        or None if invalid. Broken out for testing.
        """
        decryptor = crypto.decryptor(FLAGS.build_plan_encryption_key)
        try:
            json_entry = decryptor(blob)
            # Extract our WeightedHost values
            wh_dict = json.loads(json_entry)
            host = wh_dict.get('host', None)
            blob = wh_dict.get('blob', None)
            zone = wh_dict.get('zone', None)
            return least_cost.WeightedHost(wh_dict['weight'],
                        host=host, blob=blob, zone=zone)

        except M2Crypto.EVP.EVPError:
            raise InvalidBlob()
Exemplo n.º 15
0
    def test_select(self):
        serializer = zones.WeightsTemplate()

        key = 'c286696d887c9aa0611bbb3e2025a45a'

        encrypt = crypto.encryptor(key)
        decrypt = crypto.decryptor(key)

        item = GLOBAL_BUILD_PLAN[0]
        fixture = {
            'weights': {
                'blob': encrypt(json.dumps(item)),
                'weight': item['weight']
            }
        }

        output = serializer.serialize(fixture)
        res_tree = etree.XML(output)

        self.assertEqual(res_tree.tag, '{%s}weights' % xmlutil.XMLNS_V10)

        for item in res_tree:
            self.assertEqual(item.tag, '{%s}weight' % xmlutil.XMLNS_V10)
            blob = None
            weight = None
            for chld in item:
                if chld.tag.endswith('blob'):
                    blob = chld.text
                elif chld.tag.endswith('weight'):
                    weight = chld.text

            secret_item = json.loads(decrypt(blob))
            found = False
            for original_item in GLOBAL_BUILD_PLAN:
                if original_item['name'] != secret_item['name']:
                    continue
                found = True
                for key in ('weight', 'ip', 'zone'):
                    self.assertEqual(secret_item[key], original_item[key])

            self.assertTrue(found)
            self.assertEqual(len(item), 2)
            self.assertTrue(weight)
Exemplo n.º 16
0
    def test_select(self):
        serializer = zones.WeightsTemplate()

        key = 'c286696d887c9aa0611bbb3e2025a45a'

        encrypt = crypto.encryptor(key)
        decrypt = crypto.decryptor(key)

        item = GLOBAL_BUILD_PLAN[0]
        fixture = {'weights': {'blob': encrypt(json.dumps(item)),
                               'weight': item['weight']}}

        output = serializer.serialize(fixture)
        res_tree = etree.XML(output)

        self.assertEqual(res_tree.tag, '{%s}weights' % xmlutil.XMLNS_V10)

        for item in res_tree:
            self.assertEqual(item.tag, '{%s}weight' % xmlutil.XMLNS_V10)
            blob = None
            weight = None
            for chld in item:
                if chld.tag.endswith('blob'):
                    blob = chld.text
                elif chld.tag.endswith('weight'):
                    weight = chld.text

            secret_item = json.loads(decrypt(blob))
            found = False
            for original_item in GLOBAL_BUILD_PLAN:
                if original_item['name'] != secret_item['name']:
                    continue
                found = True
                for key in ('weight', 'ip', 'zone'):
                    self.assertEqual(secret_item[key], original_item[key])

            self.assertTrue(found)
            self.assertEqual(len(item), 2)
            self.assertTrue(weight)
Exemplo n.º 17
0
    def test_select(self):
        serializer = zones.WeightsTemplate()

        key = "c286696d887c9aa0611bbb3e2025a45a"

        encrypt = crypto.encryptor(key)
        decrypt = crypto.decryptor(key)

        item = GLOBAL_BUILD_PLAN[0]
        fixture = {"weights": {"blob": encrypt(json.dumps(item)), "weight": item["weight"]}}

        output = serializer.serialize(fixture)
        res_tree = etree.XML(output)

        self.assertEqual(res_tree.tag, "{%s}weights" % xmlutil.XMLNS_V10)

        for item in res_tree:
            self.assertEqual(item.tag, "{%s}weight" % xmlutil.XMLNS_V10)
            blob = None
            weight = None
            for chld in item:
                if chld.tag.endswith("blob"):
                    blob = chld.text
                elif chld.tag.endswith("weight"):
                    weight = chld.text

            secret_item = json.loads(decrypt(blob))
            found = False
            for original_item in GLOBAL_BUILD_PLAN:
                if original_item["name"] != secret_item["name"]:
                    continue
                found = True
                for key in ("weight", "ip", "zone"):
                    self.assertEqual(secret_item[key], original_item[key])

            self.assertTrue(found)
            self.assertEqual(len(item), 2)
            self.assertTrue(weight)