def testRepoManifest(self): manifest = os.path.join(self.test_dir, "sources.xml") open(manifest, "w").write("""<?xml version="1.0" encoding="UTF-8"?> <manifest> <remote fetch="http://example.com/foo/" name="foo"/> <remote fetch="git://example.com/bar/" name="bar"/> <default remote="bar"/> <project name="projects/one" revision="abcd1234"/> <project name="projects/two" path="projects/another" revision="ffffffff" remote="foo"/> <project name="something_else" revision="00000000" remote="bar"/> </manifest> """) # Use a source file from each of the three projects file1 = os.path.join(self.test_dir, "projects", "one", "src1.c") file2 = os.path.join(self.test_dir, "projects", "another", "src2.c") file3 = os.path.join(self.test_dir, "something_else", "src3.c") d = symbolstore.Dumper("dump_syms", "symbol_path", repo_manifest=manifest) self.assertEqual("git:example.com/bar/projects/one:src1.c:abcd1234", symbolstore.GetVCSFilename(file1, d.srcdirs)[0]) self.assertEqual("git:example.com/foo/projects/two:src2.c:ffffffff", symbolstore.GetVCSFilename(file2, d.srcdirs)[0]) self.assertEqual("git:example.com/bar/something_else:src3.c:00000000", symbolstore.GetVCSFilename(file3, d.srcdirs)[0])
def testFileMapping(self, mock_Popen): files = [('a/b', 'mozilla/b'), ('c/d', 'foo/d')] if os.sep != '/': files = [[f.replace('/', os.sep) for f in x] for x in files] file_mapping = {} dumped_files = [] expected_files = [] for s, o in files: srcfile = os.path.join(self.srcdir, s) expected_files.append(srcfile) file_mapping[os.path.join(self.objdir, o)] = srcfile dumped_files.append( os.path.join(self.objdir, 'x', 'y', '..', '..', o)) # mock the dump_syms output file_id = ("X" * 33, 'somefile') def mk_output(files): return iter(['MODULE os x86 %s %s\n' % file_id] + ['FILE %d %s\n' % (i, s) for i, s in enumerate(files)] + ['PUBLIC xyz 123\n']) mock_Popen.return_value.stdout = mk_output(dumped_files) d = symbolstore.Dumper('dump_syms', self.symboldir, file_mapping=file_mapping) f = os.path.join(self.objdir, 'somefile') open(f, 'wb').write('blah') d.Process(f) d.Finish(stop_pool=False) expected_output = ''.join(mk_output(expected_files)) symbol_file = os.path.join(self.symboldir, file_id[1], file_id[0], file_id[1] + '.sym') self.assertEqual(open(symbol_file, 'r').read(), expected_output)
def testFileMapping(self, mock_Popen): files = [("a/b", "mozilla/b"), ("c/d", "foo/d")] if os.sep != "/": files = [[f.replace("/", os.sep) for f in x] for x in files] file_mapping = {} dumped_files = [] expected_files = [] self.make_dirs(os.path.join(self.objdir, "x", "y")) for s, o in files: srcfile = os.path.join(self.srcdir, s) self.make_file(srcfile) expected_files.append(realpath(srcfile)) objfile = os.path.join(self.objdir, o) self.make_file(objfile) file_mapping[realpath(objfile)] = realpath(srcfile) dumped_files.append( os.path.join(self.objdir, "x", "y", "..", "..", o)) # mock the dump_syms output file_id = ("X" * 33, "somefile") def mk_output(files): return iter(["MODULE os x86 %s %s\n" % file_id] + ["FILE %d %s\n" % (i, s) for i, s in enumerate(files)] + ["PUBLIC xyz 123\n"]) mock_Popen.return_value.stdout = mk_output(dumped_files) mock_Popen.return_value.wait.return_value = 0 d = symbolstore.Dumper("dump_syms", self.symboldir, file_mapping=file_mapping) f = os.path.join(self.objdir, "somefile") open(f, "w").write("blah") d.Process(f) expected_output = "".join(mk_output(expected_files)) symbol_file = os.path.join(self.symboldir, file_id[1], file_id[0], file_id[1] + ".sym") self.assertEqual(open(symbol_file, "r").read(), expected_output)