subversion_file_system_test.py revision ca12bfac764ba476d6cd062bf1dde12cc64c3f40
1#!/usr/bin/env python
2# Copyright (c) 2012 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6import json
7import os
8import sys
9import unittest
10
11from fake_url_fetcher import FakeUrlFetcher
12from file_system import StatInfo
13from future import Future
14from subversion_file_system import SubversionFileSystem
15
16class SubversionFileSystemTest(unittest.TestCase):
17  def setUp(self):
18    self._base_path = os.path.join(sys.path[0], 'test_data', 'file_system')
19
20  def _CreateSubversionFileSystem(self):
21    fetcher = FakeUrlFetcher(self._base_path)
22    return SubversionFileSystem(fetcher, fetcher, self._base_path)
23
24  def _ReadLocalFile(self, filename):
25    with open(os.path.join(self._base_path, filename), 'r') as f:
26      return f.read()
27
28  def testReadFiles(self):
29    expected = {
30      'test1.txt': 'test1\n',
31      'test2.txt': 'test2\n',
32      'test3.txt': 'test3\n',
33    }
34    file_system = self._CreateSubversionFileSystem()
35    self.assertEqual(
36        expected,
37        file_system.Read(['test1.txt', 'test2.txt', 'test3.txt']).Get())
38
39  def testListDir(self):
40    expected = ['dir/'] + ['file%d.html' % i for i in range(7)]
41    file_system = self._CreateSubversionFileSystem()
42    self.assertEqual(expected, sorted(file_system.ReadSingle('list/')))
43
44  def testListSubDir(self):
45    expected = ['empty.txt'] + ['file%d.html' % i for i in range(3)]
46    file_system = self._CreateSubversionFileSystem()
47    self.assertEqual(expected, sorted(file_system.ReadSingle('list/dir/')))
48
49  def testDirStat(self):
50    file_system = self._CreateSubversionFileSystem()
51    stat_info = file_system.Stat('stat/')
52    expected = StatInfo(
53      '151113',
54      child_versions=json.loads(self._ReadLocalFile('stat_result.json')))
55    self.assertEqual(expected, stat_info)
56
57  def testFileStat(self):
58    file_system = self._CreateSubversionFileSystem()
59    stat_info = file_system.Stat('stat/extension_api.h')
60    self.assertEqual(StatInfo('146163'), stat_info)
61
62  def testRevisions(self):
63    # This is a super hacky test. Record the path that was fetched then exit the
64    # test. Compare.
65    class ValueErrorFetcher(object):
66      def __init__(self):
67        self.last_fetched = None
68
69      def FetchAsync(self, path):
70        self.last_fetched = path
71        raise ValueError()
72
73      def Fetch(self, path):
74        self.last_fetched = path
75        raise ValueError()
76
77    file_fetcher = ValueErrorFetcher()
78    stat_fetcher = ValueErrorFetcher()
79    svn_path = 'svn:'
80
81    svn_file_system = SubversionFileSystem(file_fetcher,
82                                           stat_fetcher,
83                                           svn_path,
84                                           revision=42)
85
86    self.assertRaises(ValueError, svn_file_system.ReadSingle, 'dir/file')
87    self.assertEqual('dir/file?p=42', file_fetcher.last_fetched)
88    # Stat() will always stat directories.
89    self.assertRaises(ValueError, svn_file_system.Stat, 'dir/file')
90    self.assertEqual('dir/?pathrev=42', stat_fetcher.last_fetched)
91
92    self.assertRaises(ValueError, svn_file_system.ReadSingle, 'dir/')
93    self.assertEqual('dir/?p=42', file_fetcher.last_fetched)
94    self.assertRaises(ValueError, svn_file_system.Stat, 'dir/')
95    self.assertEqual('dir/?pathrev=42', stat_fetcher.last_fetched)
96
97if __name__ == '__main__':
98  unittest.main()
99