blob: a0661f0a7110ded3f978f3002156059db0ca9861 [file] [log] [blame]
# Copyright 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 os
from PIL import Image
import sets
import sys
import unittest
sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir))
from tests.rendering_test_manager import mock_cloud_bucket
from tests.rendering_test_manager import cloud_bucket
from tools import rendering_test_manager
from tools import image_tools
class BucketRenderingTestManagerUnitTest(unittest.TestCase):
def setUp(self):
# Set up structures that will be reused throughout testing.
self.bucket = mock_cloud_bucket.MockCloudBucket()
self.manager = rendering_test_manager.RenderingTestManager(self.bucket)
self.white = Image.new('RGBA', (25, 25), (255, 255, 255, 255))
self.red = Image.new('RGBA', (25, 25), (255, 0, 0, 255))
self.black = Image.new('RGBA', (25, 25), (0, 0, 0, 255))
def testUploadImage(self):
self.bucket.Reset()
# Upload some images to the datastore.
self.manager.UploadImage('path/to/white.png', self.white)
self.manager.UploadImage('path/to/black.png', self.black)
self.manager.UploadImage('path/to/red.png', self.red)
# Confirm that the images actually got uploaded.
self.assertEquals(self.bucket.datastore['path/to/white.png'],
image_tools.SerializeImage(self.white).decode('base64'))
self.assertEquals(self.bucket.datastore['path/to/black.png'],
image_tools.SerializeImage(self.black).decode('base64'))
self.assertEquals(self.bucket.datastore['path/to/red.png'],
image_tools.SerializeImage(self.red).decode('base64'))
def testDownloadImage(self):
self.bucket.Reset()
# Upload some images to the datastore.
self.manager.UploadImage('path/to/white.png', self.white)
self.manager.UploadImage('path/to/black.png', self.black)
self.manager.UploadImage('path/to/red.png', self.red)
# Check that the DownloadImage function gets the correct images.
self.assertEquals(
image_tools.SerializeImage(
self.manager.DownloadImage('path/to/white.png')),
image_tools.SerializeImage(self.white))
self.assertEquals(
image_tools.SerializeImage(
self.manager.DownloadImage('path/to/black.png')),
image_tools.SerializeImage(self.black))
self.assertEquals(
image_tools.SerializeImage(
self.manager.DownloadImage('path/to/red.png')),
image_tools.SerializeImage(self.red))
# Check that the DownloadImage function throws an error for a
# nonexistant image.
self.assertRaises(cloud_bucket.FileNotFoundError,
self.manager.DownloadImage,
'path/to/yellow.png')
def testUploadTest(self):
self.bucket.Reset()
# Upload some tests to the datastore.
self.manager.UploadTest('batch', 'test1', [self.white, self.black])
self.manager.UploadTest('batch', 'test2', [self.black, self.black])
# Confirm that the tests were successfully uploaded.
self.assertEquals(self.bucket.datastore['tests/batch/test1/expected.png'],
image_tools.SerializeImage(self.white).decode('base64'))
self.assertEquals(self.bucket.datastore['tests/batch/test1/mask.png'],
image_tools.SerializeImage(self.white).decode('base64'))
self.assertEquals(self.bucket.datastore['tests/batch/test2/expected.png'],
image_tools.SerializeImage(self.black).decode('base64'))
self.assertEquals(self.bucket.datastore['tests/batch/test2/mask.png'],
image_tools.SerializeImage(self.black).decode('base64'))
def testRunTest(self):
self.bucket.Reset()
self.manager.UploadTest('batch', 'test1', [self.red, self.red])
self.manager.RunTest('batch', 'test1', 'run1', self.black)
self.assertEquals(
self.bucket.datastore['failures/batch/test1/run1/actual.png'],
image_tools.SerializeImage(self.black).decode('base64'))
self.manager.RunTest('batch', 'test1', 'run2', self.red)
self.assertFalse(
self.bucket.datastore.has_key('failures/batch/test1/run2/actual.png'))
self.assertRaises(cloud_bucket.FileNotFoundError, self.manager.RunTest,
'batch', 'test2', 'run1', self.black)
def testGetTest(self):
self.bucket.Reset()
# Upload some tests to the datastore
self.manager.UploadTest('batch', 'test1', [self.white, self.black])
self.manager.UploadTest('batch', 'test2', [self.red, self.white])
test1 = self.manager.GetTest('batch', 'test1')
test2 = self.manager.GetTest('batch', 'test2')
# Check that GetTest gets the appropriate tests.
self.assertEquals(image_tools.SerializeImage(test1.expected),
image_tools.SerializeImage(self.white))
self.assertEquals(image_tools.SerializeImage(test1.mask),
image_tools.SerializeImage(self.white))
self.assertEquals(image_tools.SerializeImage(test2.expected),
image_tools.SerializeImage(self.red))
self.assertEquals(image_tools.SerializeImage(test2.mask),
image_tools.SerializeImage(self.white))
# Check that GetTest throws an error for a nonexistant test.
self.assertRaises(
cloud_bucket.FileNotFoundError, self.manager.GetTest, 'batch', 'test3')
def testTestExists(self):
self.bucket.Reset()
self.manager.UploadTest('batch', 'test1', [self.white, self.black])
self.manager.UploadTest('batch', 'test2', [self.white, self.black])
self.assertTrue(self.manager.TestExists('batch', 'test1'))
self.assertTrue(self.manager.TestExists('batch', 'test2'))
self.assertFalse(self.manager.TestExists('batch', 'test3'))
def testFailureExists(self):
self.bucket.Reset()
self.manager.UploadTest('batch', 'test1', [self.white, self.white])
self.manager.RunTest('batch', 'test1', 'run1', self.black)
self.manager.RunTest('batch', 'test1', 'run2', self.white)
self.assertTrue(self.manager.FailureExists('batch', 'test1', 'run1'))
self.assertFalse(self.manager.FailureExists('batch', 'test1', 'run2'))
def testRemoveTest(self):
self.bucket.Reset()
self.manager.UploadTest('batch', 'test1', [self.white, self.white])
self.manager.UploadTest('batch', 'test2', [self.white, self.white])
self.assertTrue(self.manager.TestExists('batch', 'test1'))
self.assertTrue(self.manager.TestExists('batch', 'test2'))
self.manager.RemoveTest('batch', 'test1')
self.assertFalse(self.manager.TestExists('batch', 'test1'))
self.assertTrue(self.manager.TestExists('batch', 'test2'))
self.manager.RemoveTest('batch', 'test2')
self.assertFalse(self.manager.TestExists('batch', 'test1'))
self.assertFalse(self.manager.TestExists('batch', 'test2'))
def testRemoveFailure(self):
self.bucket.Reset()
self.manager.UploadTest('batch', 'test1', [self.white, self.white])
self.manager.UploadTest('batch', 'test2', [self.white, self.white])
self.manager.RunTest('batch', 'test1', 'run1', self.black)
self.manager.RunTest('batch', 'test1', 'run2', self.black)
self.manager.RemoveFailure('batch', 'test1', 'run1')
self.assertFalse(self.manager.FailureExists('batch', 'test1', 'run1'))
self.assertTrue(self.manager.TestExists('batch', 'test1'))
self.assertTrue(self.manager.FailureExists('batch', 'test1', 'run2'))
self.assertTrue(self.manager.TestExists('batch', 'test2'))
def testGetFailure(self):
self.bucket.Reset()
# Upload a result
self.manager.UploadTest('batch', 'test1', [self.red, self.red])
self.manager.RunTest('batch', 'test1', 'run1', self.black)
res = self.manager.GetFailure('batch', 'test1', 'run1')
# Check that the function correctly got the result.
self.assertEquals(image_tools.SerializeImage(res.expected),
image_tools.SerializeImage(self.red))
self.assertEquals(image_tools.SerializeImage(res.diff),
image_tools.SerializeImage(self.white))
self.assertEquals(image_tools.SerializeImage(res.actual),
image_tools.SerializeImage(self.black))
# Check that the function raises an error when given non-existant results.
self.assertRaises(cloud_bucket.FileNotFoundError,
self.manager.GetFailure,
'batch', 'test1', 'run2')
self.assertRaises(cloud_bucket.FileNotFoundError,
self.manager.GetFailure,
'batch', 'test2', 'run1')
def testGetAllPaths(self):
self.bucket.Reset()
# Upload some tests.
self.manager.UploadTest('batch', 'test1', [self.white, self.black])
self.manager.UploadTest('batch', 'test2', [self.red, self.white])
# Check that the function gets all urls matching the prefix.
self.assertEquals(
sets.Set(self.manager.GetAllPaths('tests/batch/test')),
sets.Set(['tests/batch/test1/expected.png',
'tests/batch/test1/mask.png',
'tests/batch/test2/expected.png',
'tests/batch/test2/mask.png']))
self.assertEquals(sets.Set(self.manager.GetAllPaths('tests/batch/test1')),
sets.Set(['tests/batch/test1/expected.png',
'tests/batch/test1/mask.png']))
self.assertEquals(sets.Set(self.manager.GetAllPaths('tests/batch/test3')),
sets.Set())
if __name__ == '__main__':
unittest.main()