| Index: chrome/test/functional/ispy/ispy_core/Tests/BucketManagerTests/bucket_manager_test.py
|
| diff --git a/chrome/test/functional/ispy/ispy_core/Tests/BucketManagerTests/bucket_manager_test.py b/chrome/test/functional/ispy/ispy_core/Tests/BucketManagerTests/bucket_manager_test.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e878adb0f979ea84a5546cd7c79172e033c36538
|
| --- /dev/null
|
| +++ b/chrome/test/functional/ispy/ispy_core/Tests/BucketManagerTests/bucket_manager_test.py
|
| @@ -0,0 +1,228 @@
|
| +# Copyright (c) 2013 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import unittest
|
| +from PIL import Image
|
| +
|
| +from Tests.BucketManagerTests.DependancyInjection import boto_testing_injector
|
| +from Tools import bucket_manager
|
| +from Tools import image_tools
|
| +
|
| +
|
| +class BucketManagerTest(unittest.TestCase):
|
| +
|
| + def setUp(self):
|
| + self.injector = boto_testing_injector.TestingInjector()
|
| + self.manager = bucket_manager.Manager(self.injector)
|
| + self.white = Image.new('RGB', (25, 25), (255, 255, 255))
|
| + self.red = Image.new('RGB', (25, 25), (255, 0, 0))
|
| + self.black = Image.new('RGB', (25, 25), (0, 0, 0))
|
| +
|
| + def testAuthenticateBucket(self):
|
| + self.injector.reset()
|
| +# after calling authenticate bucket, ensure that all the functions:
|
| +# storage_uri, connect, and get_bucket are called.
|
| + bucket = self.manager._AuthenticateBucket('bucket', 'key', 'secret')
|
| +
|
| + self.assertTrue(
|
| + bucket.connection and
|
| + bucket.uri and
|
| + bucket.bucket_name == 'bucket' and
|
| + bucket.uri.uri_str == '' and
|
| + bucket.uri.default_scheme == 'gs' and
|
| + bucket.key == 'key' and
|
| + bucket.secret == 'secret'
|
| + )
|
| +
|
| + def testGetConnection(self):
|
| + self.injector.reset()
|
| +# set up two buckets that should be the same.
|
| + bucket_name = bucket_manager.BUCKET
|
| + key = bucket_manager.KEY
|
| + secret = bucket_manager.SECRET
|
| + bucket1 = self.manager._AuthenticateBucket(bucket_name, key, secret)
|
| + bucket2 = self.manager._GetConnection()
|
| +# test that they have the same secret and key.
|
| + self.assertTrue(
|
| + bucket1.secret == bucket2.secret and
|
| + bucket2.key == bucket2.key
|
| + )
|
| +
|
| + def testMakeKeyToFile(self):
|
| + self.injector.reset()
|
| +
|
| +# put a key in the database
|
| + bucket = self.manager._GetConnection()
|
| + key = self.injector.get_key(bucket)
|
| + key.set_path('path/to/cats')
|
| + key.set_contents_from_string('cat, cat, cat')
|
| +
|
| +# create a new key, and check that it already exists.
|
| + key = self.manager.MakeKeyToFile('path/to/cats')
|
| + self.assertEquals(key.path, 'path/to/cats')
|
| + self.assertTrue(key.exists())
|
| +# create a new key that shouldn't already exist in the database.
|
| + key2 = self.manager.MakeKeyToFile('path/to/dogs')
|
| + self.assertEquals(key2.path, 'path/to/dogs')
|
| + self.assertFalse(key2.exists())
|
| +
|
| + def testGetKeyToFile(self):
|
| + self.injector.reset()
|
| +# set up a key in the database.
|
| + bucket = self.manager._GetConnection()
|
| + key = self.injector.get_key(bucket)
|
| + key.set_path('path/to/cats')
|
| + key.set_contents_from_string('tabby, siamese, bengle')
|
| +# attempt to get the created key, should work.
|
| + key = self.manager.GetKeyToFile('path/to/cats')
|
| + self.assertEquals(key.path, 'path/to/cats')
|
| + self.assertTrue(key.exists())
|
| +# attempt to get a key that doesn't exist in the database, should error.
|
| + self.assertRaises(
|
| + bucket_manager.NotFoundException,
|
| + self.manager.GetKeyToFile,
|
| + 'path/that/doesnt/exist'
|
| + )
|
| +
|
| + def testUploadImage(self):
|
| + self.injector.reset()
|
| +# set up a black image and upload it to the datastore.
|
| + self.manager.UploadImage('path/to/image.png', self.black)
|
| +# confirm that the key
|
| + key = self.manager.GetKeyToFile('path/to/image.png')
|
| + self.assertIsNotNone(key)
|
| + self.assertEquals(
|
| + key.get_contents_as_string(),
|
| + image_tools.SerializeImage(self.black).decode('base64')
|
| + )
|
| +
|
| + def testUploadTest(self):
|
| + self.injector.reset()
|
| +# put the images into the datastore
|
| + self.manager.UploadTest('test', [self.white, self.black])
|
| +# retreive the images
|
| + expected = self.manager.GetKeyToFile('Tests/test_expected.png')
|
| + mask = self.manager.GetKeyToFile('Tests/test_mask.png')
|
| +# assert that white is the expected image and the mask image,
|
| +# and that both images have proper meta-data.
|
| + self.assertEquals(
|
| + image_tools.SerializeImage(self.white).decode('base64'),
|
| + expected.contents)
|
| + self.assertEquals(expected.meta_data['Content-Type'], 'image/png')
|
| + self.assertEquals(
|
| + image_tools.SerializeImage(self.white).decode('base64'),
|
| + mask.contents)
|
| + self.assertEquals(mask.meta_data['Content-Type'], 'image/png')
|
| +
|
| + def testUploadResult(self):
|
| + self.injector.reset()
|
| +# set up the images to conduct the test.
|
| + expected = self.black
|
| + diff = self.white
|
| + actual = self.red
|
| +# upload the images.
|
| + self.manager.UploadResult('test', 'testrun', expected, diff, actual)
|
| +
|
| +# collect the images from the datastore
|
| + ds_expected = self.manager.GetKeyToFile('Results/test/testrun/expected.png')
|
| + ds_diff = self.manager.GetKeyToFile('Results/test/testrun/diff.png')
|
| + ds_actual = self.manager.GetKeyToFile('Results/test/testrun/actual.png')
|
| +
|
| +# compare the datastore images with the originals
|
| +
|
| + self.assertTrue(
|
| + image_tools.SerializeImage(expected) ==
|
| + ds_expected.get_contents_as_string().encode('base64') and
|
| + image_tools.SerializeImage(diff) ==
|
| + ds_diff.get_contents_as_string().encode('base64') and
|
| + image_tools.SerializeImage(actual) ==
|
| + ds_actual.get_contents_as_string().encode('base64'))
|
| +
|
| + def testGetTest(self):
|
| + self.injector.reset()
|
| +# set up and upload the test to the datastore
|
| + self.manager.UploadTest('bigtest', [self.white, self.black])
|
| +# attempt to get the test that was uploaded
|
| + test = self.manager.GetTest('bigtest')
|
| +# check that the expected and mask images match what should be uploaded
|
| + mask = image_tools.CreateMask([self.white, self.black])
|
| + expected = self.white
|
| + self.assertTrue(
|
| + image_tools.SameImage(mask, test['mask']) and
|
| + image_tools.SameImage(expected, test['expected'])
|
| + )
|
| +
|
| +# now check that the GetTest call throws NotFoundException.
|
| + self.assertRaises(
|
| + bucket_manager.NotFoundException,
|
| + self.manager.GetTest,
|
| + 'faketest'
|
| + )
|
| +
|
| + def testGetResult(self):
|
| + self.injector.reset()
|
| +# upload the result
|
| + self.manager.UploadResult('bigtest', 'color-run',
|
| + self.black, self.white, self.red)
|
| +# get the urls to the result's images.
|
| + result = self.manager.GetResult('bigtest', 'color-run')
|
| +# check that they are correct.
|
| + self.assertTrue(
|
| + result['expected'] == 'Results/bigtest/color-run/expected.png' and
|
| + result['diff'] == 'Results/bigtest/color-run/diff.png' and
|
| + result['actual'] == 'Results/bigtest/color-run/actual.png'
|
| + )
|
| +# try to get some results that don't exist.
|
| + self.assertRaises(
|
| + bucket_manager.NotFoundException,
|
| + self.manager.GetResult,
|
| + 'littletest',
|
| + 'color-run'
|
| + )
|
| + self.assertRaises(
|
| + bucket_manager.NotFoundException,
|
| + self.manager.GetResult,
|
| + 'bigtest',
|
| + 'greyscale-run'
|
| + )
|
| +
|
| + def testGetURL(self):
|
| + self.injector.reset()
|
| +# set up image to get a url to
|
| + self.manager.UploadImage('path/to/image.png', self.white)
|
| +# assert that url is correct, note that the testing injector
|
| +# provides the path as the url.
|
| + self.assertTrue(
|
| + self.manager.GetURL('path/to/image.png') == 'path/to/image.png'
|
| + )
|
| +# attempt to get a url to a file that doesn't exist.
|
| + self.assertRaises(
|
| + bucket_manager.NotFoundException,
|
| + self.manager.GetURL,
|
| + 'i/dont/exist.png'
|
| + )
|
| +
|
| + def testGetAllKeys(self):
|
| + self.injector.reset()
|
| +# populate the datastore with some keys
|
| + self.manager.UploadImage('image/red.png', self.red)
|
| + self.manager.UploadImage('image/special/black.png', self.black)
|
| + self.manager.UploadImage('image/white.png', self.white)
|
| +
|
| +# access the keys to these images, and confirm they are correct
|
| + self.assertTrue(
|
| + len(self.manager.GetAllKeys(prefix='image')) == 3
|
| + )
|
| + self.assertTrue(
|
| + len(self.manager.GetAllKeys(prefix='image/special')) == 1
|
| + )
|
| + self.assertTrue(
|
| + len(self.manager.GetAllKeys(prefix='')) == 3
|
| + )
|
| + self.assertTrue(
|
| + len(self.manager.GetAllKeys(prefix='notimage')) == 0
|
| + )
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|