예제 #1
0
    def _run_tha_test(self, isolated_hash=None, files=None, command=None):
        files = files or {}
        make_tree_call = []

        def add(i, _):
            make_tree_call.append(i)

        for i in ('make_tree_read_only', 'make_tree_files_read_only',
                  'make_tree_deleteable', 'make_tree_writeable'):
            self.mock(file_path, i, functools.partial(add, i))

        data = run_isolated.TaskData(
            command=command or [],
            relative_cwd=None,
            extra_args=[],
            isolated_hash=isolated_hash,
            storage=StorageFake(files),
            isolate_cache=local_caching.MemoryContentAddressedCache(),
            outputs=None,
            install_named_caches=init_named_caches_stub,
            leak_temp_dir=False,
            root_dir=None,
            hard_timeout=60,
            grace_period=30,
            bot_file=None,
            switch_to_account=False,
            install_packages_fn=run_isolated.noop_install_packages,
            use_symlinks=False,
            env={},
            env_prefix={})
        ret = run_isolated.run_tha_test(data, None)
        self.assertEqual(0, ret)
        return make_tree_call
예제 #2
0
  def _run_tha_test(self, isolated_hash=None, files=None, command=None):
    files = files or {}
    make_tree_call = []
    def add(i, _):
      make_tree_call.append(i)
    for i in ('make_tree_read_only', 'make_tree_files_read_only',
              'make_tree_deleteable', 'make_tree_writeable'):
      self.mock(file_path, i, functools.partial(add, i))

    ret = run_isolated.run_tha_test(
        command or [],
        isolated_hash,
        StorageFake(files),
        isolateserver.MemoryCache(),
        None,
        init_named_caches_stub,
        False,
        None,
        None,
        None,
        None,
        None,
        run_isolated.noop_install_packages,
        False)
    self.assertEqual(0, ret)
    return make_tree_call
예제 #3
0
class RunIsolatedTestOutputFiles(RunIsolatedTestBase):
    def _run_test(self, isolated, command):
        # Starts a full isolate server mock and have run_tha_test() uploads results
        # back after the task completed.
        server = isolateserver_mock.MockIsolateServer()
        try:
            script = ('import sys\n'
                      'open(sys.argv[1], "w").write("bar")\n'
                      'open(sys.argv[2], "w").write("baz")\n')
            script_hash = isolateserver_mock.hash_content(script)
            isolated['files']['cmd.py'] = {
                'h': script_hash,
                'm': 0700,
                's': len(script),
            }
            if sys.platform == 'win32':
                isolated['files']['cmd.py'].pop('m')
            isolated_data = json_dumps(isolated)
            isolated_hash = isolateserver_mock.hash_content(isolated_data)
            server.add_content('default-store', script)
            server.add_content('default-store', isolated_data)
            store = isolateserver.get_storage(server.url, 'default-store')

            self.mock(sys, 'stdout', StringIO.StringIO())
            ret = run_isolated.run_tha_test(command, isolated_hash, store,
                                            isolateserver.MemoryCache(),
                                            ['foo', 'foodir/foo2'],
                                            init_named_caches_stub, False,
                                            None, None, None, None, None,
                                            run_isolated.noop_install_packages,
                                            False)
            self.assertEqual(0, ret)

            # It uploaded back. Assert the store has a new item containing foo.
            hashes = {isolated_hash, script_hash}
            foo_output_hash = isolateserver_mock.hash_content('bar')
            foo2_output_hash = isolateserver_mock.hash_content('baz')
            hashes.add(foo_output_hash)
            hashes.add(foo2_output_hash)
            isolated = {
                'algo': 'sha-1',
                'files': {
                    'foo': {
                        'h': foo_output_hash,
                        # TODO(maruel): Handle umask.
                        'm': 0640,
                        's': 3,
                    },
                    'foodir/foo2': {
                        'h': foo2_output_hash,
                        # TODO(maruel): Handle umask.
                        'm': 0640,
                        's': 3,
                    },
                },
                'version': isolated_format.ISOLATED_FILE_VERSION,
            }
예제 #4
0
    def _run_tha_test(self, isolated_hash, files):
        make_tree_call = []

        def add(i, _):
            make_tree_call.append(i)

        for i in ('make_tree_read_only', 'make_tree_files_read_only',
                  'make_tree_deleteable', 'make_tree_writeable'):
            self.mock(file_path, i, functools.partial(add, i))

        ret = run_isolated.run_tha_test(isolated_hash, StorageFake(files),
                                        isolateserver.MemoryCache(), False,
                                        None, None, None, None, [])
        self.assertEqual(0, ret)
        return make_tree_call
예제 #5
0
  def _run_tha_test(self, isolated_hash, files):
    make_tree_call = []
    def add(i, _):
      make_tree_call.append(i)
    for i in ('make_tree_read_only', 'make_tree_files_read_only',
              'make_tree_deleteable', 'make_tree_writeable'):
      self.mock(file_path, i, functools.partial(add, i))

    ret = run_isolated.run_tha_test(
        isolated_hash,
        StorageFake(files),
        isolateserver.MemoryCache(),
        False,
        [])
    self.assertEqual(0, ret)
    return make_tree_call
예제 #6
0
    def _run_tha_test(self, isolated_hash, files):
        make_tree_call = []

        def add(i, _):
            make_tree_call.append(i)

        for i in ("make_tree_read_only", "make_tree_files_read_only", "make_tree_deleteable", "make_tree_writeable"):
            self.mock(run_isolated, i, functools.partial(add, i))

        # Keeps tuple of (args, kwargs).
        subprocess_call = []
        self.mock(run_isolated.subprocess, "call", lambda *x, **y: subprocess_call.append((x, y)) or 0)

        ret = run_isolated.run_tha_test(isolated_hash, StorageFake(files), run_isolated.isolateserver.MemoryCache(), [])
        self.assertEqual(0, ret)
        return subprocess_call, make_tree_call
예제 #7
0
    def _run_tha_test(self, isolated_hash, files):
        make_tree_call = []

        def add(i, _):
            make_tree_call.append(i)

        for i in ('make_tree_read_only', 'make_tree_files_read_only',
                  'make_tree_deleteable', 'make_tree_writeable'):
            self.mock(run_isolated, i, functools.partial(add, i))

        # Keeps tuple of (args, kwargs).
        subprocess_call = []
        self.mock(run_isolated.subprocess, 'call',
                  lambda *x, **y: subprocess_call.append((x, y)) or 0)

        ret = run_isolated.run_tha_test(
            isolated_hash, StorageFake(files),
            run_isolated.isolateserver.MemoryCache(), [])
        self.assertEqual(0, ret)
        return subprocess_call, make_tree_call
예제 #8
0
class RunIsolatedTestRun(RunIsolatedTestBase):
    # Runs the actual command requested.
    def test_output(self):
        # Starts a full isolate server mock and have run_tha_test() uploads results
        # back after the task completed.
        server = isolateserver_mock.MockIsolateServer()
        try:
            script = ('import sys\n' 'open(sys.argv[1], "w").write("bar")\n')
            script_hash = isolateserver_mock.hash_content(script)
            isolated = {
                u'algo': u'sha-1',
                u'command': [u'cmd.py', u'${ISOLATED_OUTDIR}/foo'],
                u'files': {
                    u'cmd.py': {
                        u'h': script_hash,
                        u'm': 0700,
                        u's': len(script),
                    },
                },
                u'version': isolated_format.ISOLATED_FILE_VERSION,
            }
            if sys.platform == 'win32':
                isolated[u'files'][u'cmd.py'].pop(u'm')
            isolated_data = json_dumps(isolated)
            isolated_hash = isolateserver_mock.hash_content(isolated_data)
            server.add_content('default-store', script)
            server.add_content('default-store', isolated_data)
            store = isolateserver.get_storage(server.url, 'default-store')

            self.mock(sys, 'stdout', StringIO.StringIO())
            data = run_isolated.TaskData(
                command=[],
                relative_cwd=None,
                extra_args=[],
                isolated_hash=isolated_hash,
                storage=store,
                isolate_cache=local_caching.MemoryContentAddressedCache(),
                outputs=None,
                install_named_caches=init_named_caches_stub,
                leak_temp_dir=False,
                root_dir=None,
                hard_timeout=60,
                grace_period=30,
                bot_file=None,
                switch_to_account=False,
                install_packages_fn=run_isolated.noop_install_packages,
                use_symlinks=False,
                env={},
                env_prefix={})
            ret = run_isolated.run_tha_test(data, None)
            self.assertEqual(0, ret)

            # It uploaded back. Assert the store has a new item containing foo.
            hashes = {isolated_hash, script_hash}
            output_hash = isolateserver_mock.hash_content('bar')
            hashes.add(output_hash)
            isolated = {
                u'algo': u'sha-1',
                u'files': {
                    u'foo': {
                        u'h': output_hash,
                        # TODO(maruel): Handle umask.
                        u'm': 0640,
                        u's': 3,
                    },
                },
                u'version': isolated_format.ISOLATED_FILE_VERSION,
            }
예제 #9
0
class RunIsolatedTestOutputFiles(RunIsolatedTestBase):
    # Like RunIsolatedTestRun, but ensures that specific output files
    # (as opposed to anything in $(ISOLATED_OUTDIR)) are returned.
    def _run_test(self, isolated, command, extra_args):
        # Starts a full isolate server mock and have run_tha_test() uploads results
        # back after the task completed.
        server = isolateserver_mock.MockIsolateServer()
        try:
            # Output the following structure:
            #
            # foo1
            # foodir --> foo2_sl (symlink to "foo2_content" file)
            # bardir --> bar1
            #
            # Create the symlinks only on Linux.
            script = ('import os\n'
                      'import sys\n'
                      'open(sys.argv[1], "w").write("foo1")\n'
                      'bar1_path = os.path.join(sys.argv[3], "bar1")\n'
                      'open(bar1_path, "w").write("bar1")\n'
                      'if sys.platform.startswith("linux"):\n'
                      '  foo_realpath = os.path.abspath("foo2_content")\n'
                      '  open(foo_realpath, "w").write("foo2")\n'
                      '  os.symlink(foo_realpath, sys.argv[2])\n'
                      'else:\n'
                      '  open(sys.argv[2], "w").write("foo2")\n')
            script_hash = isolateserver_mock.hash_content(script)
            isolated['files']['cmd.py'] = {
                'h': script_hash,
                'm': 0700,
                's': len(script),
            }
            if sys.platform == 'win32':
                isolated['files']['cmd.py'].pop('m')
            isolated_data = json_dumps(isolated)
            isolated_hash = isolateserver_mock.hash_content(isolated_data)
            server.add_content('default-store', script)
            server.add_content('default-store', isolated_data)
            store = isolateserver.get_storage(server.url, 'default-store')

            self.mock(sys, 'stdout', StringIO.StringIO())
            data = run_isolated.TaskData(
                command=command,
                relative_cwd=None,
                extra_args=extra_args,
                isolated_hash=isolated_hash,
                storage=store,
                isolate_cache=local_caching.MemoryContentAddressedCache(),
                outputs=['foo1', 'foodir/foo2_sl', 'bardir/'],
                install_named_caches=init_named_caches_stub,
                leak_temp_dir=False,
                root_dir=None,
                hard_timeout=60,
                grace_period=30,
                bot_file=None,
                switch_to_account=False,
                install_packages_fn=run_isolated.noop_install_packages,
                use_symlinks=False,
                env={},
                env_prefix={})
            ret = run_isolated.run_tha_test(data, None)
            self.assertEqual(0, ret)

            # It uploaded back. Assert the store has a new item containing foo.
            hashes = {isolated_hash, script_hash}
            foo1_output_hash = isolateserver_mock.hash_content('foo1')
            foo2_output_hash = isolateserver_mock.hash_content('foo2')
            bar1_output_hash = isolateserver_mock.hash_content('bar1')
            hashes.add(foo1_output_hash)
            hashes.add(foo2_output_hash)
            hashes.add(bar1_output_hash)
            isolated = {
                u'algo': u'sha-1',
                u'files': {
                    u'foo1': {
                        u'h': foo1_output_hash,
                        # TODO(maruel): Handle umask.
                        u'm': 0640,
                        u's': 4,
                    },
                    u'foodir/foo2_sl': {
                        u'h': foo2_output_hash,
                        # TODO(maruel): Handle umask.
                        u'm': 0640,
                        u's': 4,
                    },
                    u'bardir/bar1': {
                        u'h': bar1_output_hash,
                        # TODO(maruel): Handle umask.
                        u'm': 0640,
                        u's': 4,
                    },
                },
                u'version': isolated_format.ISOLATED_FILE_VERSION,
            }
예제 #10
0
    isolated_hash = ALGO(isolated).hexdigest()
    contents = {
        isolated_hash: isolated,
        script_hash: script,
    }

    path = os.path.join(self.tempdir, 'store')
    os.mkdir(path)
    for h, c in contents.iteritems():
      write_content(os.path.join(path, h), c)
    store = run_isolated.isolateserver.get_storage(path, 'default-store')

    self.mock(sys, 'stdout', StringIO.StringIO())
    ret = run_isolated.run_tha_test(
        isolated_hash,
        store,
        run_isolated.isolateserver.MemoryCache(),
        run_isolated.isolateserver.get_hash_algo('default-store'),
        [])
    self.assertEqual(0, ret)

    # It uploaded back. Assert the store has a new item containing foo.
    hashes = set(contents)
    output_hash = ALGO('bar').hexdigest()
    hashes.add(output_hash)
    uploaded = json_dumps(
        {
          'algo': 'sha-1',
          'files': {
            'foo': {
              'h': output_hash,
              # TODO(maruel): Handle umask.
예제 #11
0
            run_isolated.isolateserver.ISOLATED_FILE_VERSION,
        })
        isolated_hash = ALGO(isolated).hexdigest()
        contents = {
            isolated_hash: isolated,
            script_hash: script,
        }

        path = os.path.join(self.tempdir, 'store')
        os.mkdir(path)
        for h, c in contents.iteritems():
            write_content(os.path.join(path, h), c)
        store = run_isolated.isolateserver.get_storage(path, 'default-store')

        self.mock(sys, 'stdout', StringIO.StringIO())
        ret = run_isolated.run_tha_test(
            isolated_hash, store, run_isolated.isolateserver.MemoryCache(), [])
        self.assertEqual(0, ret)

        # It uploaded back. Assert the store has a new item containing foo.
        hashes = set(contents)
        output_hash = ALGO('bar').hexdigest()
        hashes.add(output_hash)
        uploaded = json_dumps({
            'algo':
            'sha-1',
            'files': {
                'foo': {
                    'h': output_hash,
                    # TODO(maruel): Handle umask.
                    'm': 0640,
                    's': 3,
예제 #12
0
class RunIsolatedTestOutputFiles(RunIsolatedTestBase):
  def _run_test(self, isolated, command):
    # Starts a full isolate server mock and have run_tha_test() uploads results
    # back after the task completed.
    server = isolateserver_mock.MockIsolateServer()
    try:
      # Output two files. If we're on Linux, we'll try to make one of them a
      # symlink to ensure that we correctly follow symlinks. Note that this only
      # tests file symlinks, not directory symlinks.
      # TODO(aludwin): follow directory symlinks
      script = (
        'import os\n'
        'import sys\n'
        'open(sys.argv[1], "w").write("bar")\n'
        'if sys.platform.startswith("linux"):\n'
        '  realpath = os.path.abspath("contents_of_symlink")\n'
        '  open(realpath, "w").write("baz")\n'
        '  os.symlink(realpath, sys.argv[2])\n'
        'else:\n'
        '  open(sys.argv[2], "w").write("baz")\n')
      script_hash = isolateserver_mock.hash_content(script)
      isolated['files']['cmd.py'] = {
        'h': script_hash,
        'm': 0700,
        's': len(script),
      }
      if sys.platform == 'win32':
        isolated['files']['cmd.py'].pop('m')
      isolated_data = json_dumps(isolated)
      isolated_hash = isolateserver_mock.hash_content(isolated_data)
      server.add_content('default-store', script)
      server.add_content('default-store', isolated_data)
      store = isolateserver.get_storage(server.url, 'default-store')

      self.mock(sys, 'stdout', StringIO.StringIO())
      ret = run_isolated.run_tha_test(
          command,
          isolated_hash,
          store,
          isolateserver.MemoryCache(),
          ['foo', 'foodir/foo2'],
          init_named_caches_stub,
          False,
          None,
          None,
          None,
          None,
          None,
          run_isolated.noop_install_packages,
          False)
      self.assertEqual(0, ret)

      # It uploaded back. Assert the store has a new item containing foo.
      hashes = {isolated_hash, script_hash}
      foo_output_hash = isolateserver_mock.hash_content('bar')
      foo2_output_hash = isolateserver_mock.hash_content('baz')
      hashes.add(foo_output_hash)
      hashes.add(foo2_output_hash)
      isolated =  {
        'algo': 'sha-1',
        'files': {
          'foo': {
            'h': foo_output_hash,
            # TODO(maruel): Handle umask.
            'm': 0640,
            's': 3,
          },
          'foodir/foo2': {
            'h': foo2_output_hash,
            # TODO(maruel): Handle umask.
            'm': 0640,
            's': 3,
          },
        },
        'version': isolated_format.ISOLATED_FILE_VERSION,
      }
예제 #13
0
    isolated_hash = ALGO(isolated).hexdigest()
    contents = {
        isolated_hash: isolated,
        script_hash: script,
    }

    path = os.path.join(self.tempdir, 'store')
    os.mkdir(path)
    for h, c in contents.iteritems():
      write_content(os.path.join(path, h), c)
    store = run_isolated.isolateserver.get_storage(path, 'default-store')

    self.mock(sys, 'stdout', StringIO.StringIO())
    ret = run_isolated.run_tha_test(
        isolated_hash,
        store,
        run_isolated.isolateserver.MemoryCache(),
        [])
    self.assertEqual(0, ret)

    # It uploaded back. Assert the store has a new item containing foo.
    hashes = set(contents)
    output_hash = ALGO('bar').hexdigest()
    hashes.add(output_hash)
    uploaded = json_dumps(
        {
          'algo': 'sha-1',
          'files': {
            'foo': {
              'h': output_hash,
              # TODO(maruel): Handle umask.