Пример #1
0
    def testEverything(self):
        # All these tests are dependent (see above comment) so lump everything in
        # the one test.
        delegate = _TestDelegate(
            lambda _: MockFileSystem(LocalFileSystem.Create()))

        # Test that the cron runs successfully.
        response = CronServlet(Request.ForTest('trunk'),
                               delegate_for_test=delegate).Get()
        self.assertEqual(200, response.status)

        # Save the file systems created, start with a fresh set for the next run.
        first_run_file_systems = delegate.file_systems[:]
        delegate.file_systems[:] = []

        # When re-running, all file systems should be Stat()d the same number of
        # times, but the second round shouldn't have been re-Read() since the
        # Stats haven't changed.
        response = CronServlet(Request.ForTest('trunk'),
                               delegate_for_test=delegate).Get()
        self.assertEqual(200, response.status)

        self.assertEqual(len(first_run_file_systems),
                         len(delegate.file_systems))
        for i, second_run_file_system in enumerate(delegate.file_systems):
            self.assertTrue(*second_run_file_system.CheckAndReset(
                read_count=0,
                stat_count=first_run_file_systems[i].GetStatCount()))
Пример #2
0
    def testEverything(self):
        # All these tests are dependent (see above comment) so lump everything in
        # the one test.
        delegate = _TestDelegate(
            lambda _: MockFileSystem(LocalFileSystem.Create()))

        # Test that the cron runs successfully.
        response = CronServlet(Request.ForTest('trunk'),
                               delegate_for_test=delegate).Get()
        self.assertEqual(1, len(delegate.file_systems))
        self.assertEqual(200, response.status)

        # When re-running, all file systems should be Stat()d the same number of
        # times, but the second round shouldn't have been re-Read() since the
        # Stats haven't changed.
        response = CronServlet(Request.ForTest('trunk'),
                               delegate_for_test=delegate).Get()
        self.assertEqual(2, len(delegate.file_systems))
        self.assertTrue(*delegate.file_systems[1].CheckAndReset(
            read_count=0, stat_count=delegate.file_systems[0].GetStatCount()))
Пример #3
0
    def testSafeRevision(self):
        test_data = {
            'docs': {
                'examples': {
                    'examples.txt': 'examples.txt contents'
                },
                'server2': {
                    'app.yaml': AppYamlHelper.GenerateAppYaml('2-0-8')
                },
                'static': {
                    'static.txt': 'static.txt contents'
                },
                'templates': {
                    'public': {
                        'apps': {
                            'storage.html': 'storage.html contents'
                        },
                        'extensions': {
                            'storage.html': 'storage.html contents'
                        },
                    }
                }
            }
        }

        updates = []

        def app_yaml_update(version):
            return {
                'docs': {
                    'server2': {
                        'app.yaml': AppYamlHelper.GenerateAppYaml(version)
                    }
                }
            }

        def storage_html_update(update):
            return {
                'docs': {
                    'templates': {
                        'public': {
                            'apps': {
                                'storage.html': update
                            }
                        }
                    }
                }
            }

        def static_txt_update(update):
            return {'docs': {'static': {'static.txt': update}}}

        app_yaml_path = 'docs/server2/app.yaml'
        storage_html_path = 'docs/templates/public/apps/storage.html'
        static_txt_path = 'docs/static/static.txt'

        def create_file_system(revision=None):
            '''Creates a MockFileSystem at |revision| by applying that many |updates|
      to it.
      '''
            mock_file_system = MockFileSystem(TestFileSystem(test_data))
            for update in updates[:revision]:
                mock_file_system.Update(update)
            return mock_file_system

        delegate = _TestDelegate(create_file_system)
        delegate.SetAppVersion('2-0-8')

        file_systems = delegate.file_systems

        # No updates applied yet.
        CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
        self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                         file_systems[-1].ReadSingle(app_yaml_path))
        self.assertEqual('storage.html contents',
                         file_systems[-1].ReadSingle(storage_html_path))

        # Apply updates to storage.html.
        updates.append(storage_html_update('interim contents'))
        updates.append(storage_html_update('new contents'))

        CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
        self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                         file_systems[-1].ReadSingle(app_yaml_path))
        self.assertEqual('new contents',
                         file_systems[-1].ReadSingle(storage_html_path))

        # Apply several updates to storage.html and app.yaml. The file system
        # should be pinned at the version before app.yaml changed.
        updates.append(storage_html_update('stuck here contents'))

        double_update = storage_html_update('newer contents')
        double_update.update(app_yaml_update('2-0-10'))
        updates.append(double_update)

        updates.append(storage_html_update('never gonna reach here'))

        CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
        self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                         file_systems[-1].ReadSingle(app_yaml_path))
        self.assertEqual('stuck here contents',
                         file_systems[-1].ReadSingle(storage_html_path))

        # Further pushes to storage.html will keep it pinned.
        updates.append(storage_html_update('y u not update!'))

        CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
        self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                         file_systems[-1].ReadSingle(app_yaml_path))
        self.assertEqual('stuck here contents',
                         file_systems[-1].ReadSingle(storage_html_path))

        # Likewise app.yaml.
        updates.append(app_yaml_update('2-1-0'))

        CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
        self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                         file_systems[-1].ReadSingle(app_yaml_path))
        self.assertEqual('stuck here contents',
                         file_systems[-1].ReadSingle(storage_html_path))

        # And updates to other content won't happen either.
        updates.append(static_txt_update('important content!'))

        CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
        self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                         file_systems[-1].ReadSingle(app_yaml_path))
        self.assertEqual('stuck here contents',
                         file_systems[-1].ReadSingle(storage_html_path))
        self.assertEqual('static.txt contents',
                         file_systems[-1].ReadSingle(static_txt_path))

        # Lastly - when the app version changes, everything should no longer be
        # pinned.
        delegate.SetAppVersion('2-1-0')
        CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
        self.assertEqual(AppYamlHelper.GenerateAppYaml('2-1-0'),
                         file_systems[-1].ReadSingle(app_yaml_path))
        self.assertEqual('y u not update!',
                         file_systems[-1].ReadSingle(storage_html_path))
        self.assertEqual('important content!',
                         file_systems[-1].ReadSingle(static_txt_path))
Пример #4
0
  def testSafeRevision(self):
    test_data = {
      'api': {
        '_api_features.json': '{}',
        '_manifest_features.json': '{}',
        '_permission_features.json': '{}',
      },
      'docs': {
        'examples': {
          'examples.txt': 'examples.txt contents'
        },
        'server2': {
          'app.yaml': AppYamlHelper.GenerateAppYaml('2-0-8')
        },
        'static': {
          'static.txt': 'static.txt contents'
        },
        'templates': {
          'articles': {
            'activeTab.html': 'activeTab.html contents'
          },
          'intros': {
            'browserAction.html': 'activeTab.html contents'
          },
          'private': {
            'table_of_contents.html': 'table_of_contents.html contents',
          },
          'public': {
            'apps': {
              'storage.html': '<h1>storage.html</h1> contents'
            },
            'extensions': {
              'storage.html': '<h1>storage.html</h1> contents'
            },
          },
          'json': {
            'chrome_sidenav.json': '{}',
            'content_providers.json': ReadFile(CONTENT_PROVIDERS),
            'manifest.json': '{}',
            'permissions.json': '{}',
            'strings.json': '{}',
            'whats_new.json': '{}',
          },
        }
      }
    }

    updates = []

    def app_yaml_update(version):
      return MoveTo(SERVER2, {
        'app.yaml': AppYamlHelper.GenerateAppYaml(version)
      })
    def storage_html_update(update):
      return MoveTo(PUBLIC_TEMPLATES, {
        'apps': {'storage.html': update}
      })
    def static_txt_update(update):
      return MoveTo(STATIC_DOCS, {
        'static.txt': update
      })

    storage_html_path = PUBLIC_TEMPLATES + 'apps/storage.html'
    static_txt_path = STATIC_DOCS + 'static.txt'

    def create_file_system(revision=None):
      '''Creates a MockFileSystem at |revision| by applying that many |updates|
      to it.
      '''
      mock_file_system = MockFileSystem(
          TestFileSystem(test_data, relative_to=CHROME_EXTENSIONS))
      updates_for_revision = (
          updates if revision is None else updates[:int(revision)])
      for update in updates_for_revision:
        mock_file_system.Update(update)
      return mock_file_system

    delegate = _TestDelegate(create_file_system)
    delegate.SetAppVersion('2-0-8')

    file_systems = delegate.file_systems

    # No updates applied yet.
    CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
    self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                     file_systems[-1].ReadSingle(APP_YAML).Get())
    self.assertEqual('<h1>storage.html</h1> contents',
                     file_systems[-1].ReadSingle(storage_html_path).Get())

    # Apply updates to storage.html.
    updates.append(storage_html_update('interim contents'))
    updates.append(storage_html_update('<h1>new</h1> contents'))

    CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
    self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                     file_systems[-1].ReadSingle(APP_YAML).Get())
    self.assertEqual('<h1>new</h1> contents',
                     file_systems[-1].ReadSingle(storage_html_path).Get())

    # Apply several updates to storage.html and app.yaml. The file system
    # should be pinned at the version before app.yaml changed.
    updates.append(storage_html_update('<h1>stuck here</h1> contents'))

    double_update = storage_html_update('<h1>newer</h1> contents')
    double_update.update(app_yaml_update('2-0-10'))
    updates.append(double_update)

    updates.append(storage_html_update('never gonna reach here'))

    CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
    self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                     file_systems[-1].ReadSingle(APP_YAML).Get())
    self.assertEqual('<h1>stuck here</h1> contents',
                     file_systems[-1].ReadSingle(storage_html_path).Get())

    # Further pushes to storage.html will keep it pinned.
    updates.append(storage_html_update('<h1>y</h1> u not update!'))

    CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
    self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                     file_systems[-1].ReadSingle(APP_YAML).Get())
    self.assertEqual('<h1>stuck here</h1> contents',
                     file_systems[-1].ReadSingle(storage_html_path).Get())

    # Likewise app.yaml.
    updates.append(app_yaml_update('2-1-0'))

    CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
    self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                     file_systems[-1].ReadSingle(APP_YAML).Get())
    self.assertEqual('<h1>stuck here</h1> contents',
                     file_systems[-1].ReadSingle(storage_html_path).Get())

    # And updates to other content won't happen either.
    updates.append(static_txt_update('important content!'))

    CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
    self.assertEqual(AppYamlHelper.GenerateAppYaml('2-0-8'),
                     file_systems[-1].ReadSingle(APP_YAML).Get())
    self.assertEqual('<h1>stuck here</h1> contents',
                     file_systems[-1].ReadSingle(storage_html_path).Get())
    self.assertEqual('static.txt contents',
                     file_systems[-1].ReadSingle(static_txt_path).Get())

    # Lastly - when the app version changes, everything should no longer be
    # pinned.
    delegate.SetAppVersion('2-1-0')
    CronServlet(Request.ForTest('trunk'), delegate_for_test=delegate).Get()
    self.assertEqual(AppYamlHelper.GenerateAppYaml('2-1-0'),
                     file_systems[-1].ReadSingle(APP_YAML).Get())
    self.assertEqual('<h1>y</h1> u not update!',
                     file_systems[-1].ReadSingle(storage_html_path).Get())
    self.assertEqual('important content!',
                     file_systems[-1].ReadSingle(static_txt_path).Get())