15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved.
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file.
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import json
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import os
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import sys
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from appengine_wrappers import files
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from fake_fetchers import ConfigureFakeFetchers
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from github_file_system import GithubFileSystem
14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)from object_store_creator import ObjectStoreCreator
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from test_util import Server2Path
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GithubFileSystemTest(unittest.TestCase):
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def setUp(self):
20b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)    ConfigureFakeFetchers()
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._base_path = Server2Path('test_data', 'github_file_system')
221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    self._file_system = GithubFileSystem.CreateChromeAppsSamples(
231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        ObjectStoreCreator.ForTest())
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def _ReadLocalFile(self, filename):
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    with open(os.path.join(self._base_path, filename), 'r') as f:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return f.read()
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testList(self):
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(json.loads(self._ReadLocalFile('expected_list.json')),
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     self._file_system.Read(['']).Get())
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testRead(self):
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEqual(self._ReadLocalFile('expected_read.txt'),
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     self._file_system.ReadSingle('analytics/launch.js').Get())
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testStat(self):
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(0, self._file_system.Stat('zipball').version)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  def testKeyGeneration(self):
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(0, len(files.GetBlobKeys()))
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._file_system.ReadSingle('analytics/launch.js').Get()
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(1, len(files.GetBlobKeys()))
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    self._file_system.ReadSingle('analytics/main.css').Get()
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    self.assertEqual(1, len(files.GetBlobKeys()))
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__':
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unittest.main()
49