def setUp(self): super(TestContentAccessCache, self).setUp() self.cache = ContentAccessCache() self.cache.cp_provider = Mock() self.mock_uep = Mock() self.mock_uep.getAccessibleContent = Mock(return_value=self.MOCK_CONTENT) self.cache.cp_provider.get_consumer_auth_cp = Mock(return_value=self.mock_uep) self.cache.identity = Mock() self.cert = Mock()
class TestContentAccessCache(SubManFixture): MOCK_CONTENT = { "lastUpdate": "2016-12-01T21:56:35+0000", "contentListing": {"42": ["cert-part1", "cert-part2"]} } MOCK_CONTENT_EMPTY_CONTENT_LISTING = { "lastUpdate": "2016-12-01T21:56:35+0000", "contentListing": None } MOCK_CERT = """ before -----BEGIN ENTITLEMENT DATA----- entitlement data goes here -----END ENTITLEMENT DATA----- after """ MOCK_OPEN_EMPTY = mock_open() MOCK_OPEN_CACHE = mock_open(read_data=json.dumps(MOCK_CONTENT)) def setUp(self): super(TestContentAccessCache, self).setUp() self.cache = ContentAccessCache() self.cache.cp_provider = Mock() self.mock_uep = Mock() self.mock_uep.getAccessibleContent = Mock(return_value=self.MOCK_CONTENT) self.cache.cp_provider.get_consumer_auth_cp = Mock(return_value=self.mock_uep) self.cache.identity = Mock() self.cert = Mock() @patch('subscription_manager.cache.open', MOCK_OPEN_EMPTY) def test_empty_cache(self): self.assertFalse(self.cache.exists()) @patch('subscription_manager.cache.open', MOCK_OPEN_EMPTY) def test_writes_to_cache_after_read(self): self.cache.check_for_update() self.MOCK_OPEN_EMPTY.assert_any_call(ContentAccessCache.CACHE_FILE, 'w') self.MOCK_OPEN_EMPTY().write.assert_any_call(json.dumps(self.MOCK_CONTENT)) @patch('subscription_manager.cache.open', MOCK_OPEN_EMPTY) def test_cert_updated_after_read(self): self.cert.serial = 42 update_data = self.cache.check_for_update() self.cache.update_cert(self.cert, update_data) self.MOCK_OPEN_EMPTY.assert_any_call(self.cert.path, 'w') self.MOCK_OPEN_EMPTY().write.assert_any_call(''.join(self.MOCK_CONTENT['contentListing']['42'])) @patch('subscription_manager.cache.open', MOCK_OPEN_CACHE) def test_check_for_update_provides_date(self): mock_exists = Mock(return_value=True) with patch('os.path.exists', mock_exists): self.cache.check_for_update() date = isodate.parse_date("2016-12-01T21:56:35+0000") self.mock_uep.getAccessibleContent.assert_called_once_with(self.cache.identity.uuid, if_modified_since=date) @patch('os.path.exists', Mock(return_value=True)) def test_cache_remove_deletes_file(self): mock_remove = Mock() with patch('os.remove', mock_remove): self.cache.remove() mock_remove.assert_called_once_with(ContentAccessCache.CACHE_FILE) @patch('subscription_manager.cache.open', MOCK_OPEN_EMPTY) def test_cache_handles_empty_content_listing(self): self.mock_uep.getAccessibleContent = Mock(return_value=self.MOCK_CONTENT_EMPTY_CONTENT_LISTING) self.cache.check_for_update() # getting this far means we did not raise an exception :-) @patch('subscription_manager.cache.open', MOCK_OPEN_EMPTY) def test_cache_fails_server_issues_gracefully(self): self.mock_uep.getAccessibleContent = Mock(side_effect=RestlibException(404)) self.cache.check_for_update()