disable tests that are flaky until someone can look into them

https://crbug.com/812425

--- a/perf_parser_test.cc
+++ b/perf_parser_test.cc
@@ -641,7 +641,7 @@ class RunInMountNamespaceThread : public quipper::Thread {
 // (Not tried):            /proc/<pid>/root/<path>
 // (Not tried): /<path>
 // Expected buildid for <path>: "deadbeef"
-TEST(PerfParserTest, ReadsBuildidsInMountNamespace) {
+TEST(PerfParserTest, DISABLED_ReadsBuildidsInMountNamespace) {
   if (!HaveCapability(CAP_SYS_ADMIN)) return;  // Skip test.
   ScopedTempDir tmpdir("/tmp/quipper_tmp.");
   ScopedTempDir mntdir("/tmp/quipper_mnt.");
@@ -776,7 +776,7 @@ class RunInMountNamespaceProcess {
 // Accept:                 /proc/<pid2>/root/<path>
 // (Not tried): /<path>
 // Expected buildid for <path>: "deadbeef"
-TEST(PerfParserTest, ReadsBuildidsInMountNamespace_TriesOwningProcess) {
+TEST(PerfParserTest, DISABLED_ReadsBuildidsInMountNamespace_TriesOwningProcess) {
   if (!HaveCapability(CAP_SYS_ADMIN)) return;  // Skip test.
   ScopedTempDir tmpdir("/tmp/quipper_tmp.");
   ScopedTempDir mntdir("/tmp/quipper_mnt.");
@@ -862,7 +862,7 @@ TEST(PerfParserTest, ReadsBuildidsInMountNamespace_TriesOwningProcess) {
 // Reject (doesn't exist): /proc/<pid+10>/root/<path>
 // Accept (same inode): /<path>
 // Expected buildid for <path>: "deadbeef"
-TEST(PerfParserTest, ReadsBuildidsInMountNamespace_TriesRootFs) {
+TEST(PerfParserTest, DISABLED_ReadsBuildidsInMountNamespace_TriesRootFs) {
   if (!HaveCapability(CAP_SYS_ADMIN)) return;  // Skip test.
   ScopedTempDir tmpdir("/tmp/quipper_tmp.");
   ScopedTempDir mntdir("/tmp/quipper_mnt.");
@@ -972,7 +972,7 @@ TEST(PerfParserTest, ReadsBuildidsInMountNamespace_TriesRootFs) {
 // Reject (wrong inode): /proc/<pid>/root/<path>
 // Reject (wrong inode): /<path>
 // Expected buildid for <path>: ""
-TEST(PerfParserTest, ReadsBuildidsInMountNamespace_TriesRootFsRejectsInode) {
+TEST(PerfParserTest, DISABLED_ReadsBuildidsInMountNamespace_TriesRootFsRejectsInode) {
   if (!HaveCapability(CAP_SYS_ADMIN)) return;  // Skip test.
   ScopedTempDir tmpdir("/tmp/quipper_tmp.");
   ScopedTempDir mntdir("/tmp/quipper_mnt.");
@@ -1036,7 +1036,7 @@ TEST(PerfParserTest, ReadsBuildidsInMountNamespace_TriesRootFsRejectsInode) {
 // Reject (not found): /proc/<pid+10>/root/<path>
 // Accept (falsely): /<path>
 // Expected buildid for <path>: "baadf00d" (even though incorrect)
-TEST(PerfParserTest, ReadsBuildidsInMountNamespace_TriesRootFsNoInodeToReject) {
+TEST(PerfParserTest, DISABLED_ReadsBuildidsInMountNamespace_TriesRootFsNoInodeToReject) {
   if (!HaveCapability(CAP_SYS_ADMIN)) return;  // Skip test.
   ScopedTempDir tmpdir("/tmp/quipper_tmp.");
   ScopedTempDir mntdir("/tmp/quipper_mnt.");
@@ -1133,7 +1133,7 @@ TEST(PerfParserTest, ReadsBuildidsInMountNamespace_TriesRootFsNoInodeToReject) {
 // A better thing to do might be to track a
 // map<tuple<maj,min,ino,path>, DSOInfo>, but even so, it will be impossible
 // to store unambiguously in perf.data.
-TEST(PerfParserTest, ReadsBuildidsInMountNamespace_DifferentDevOrIno) {
+TEST(PerfParserTest, DISABLED_ReadsBuildidsInMountNamespace_DifferentDevOrIno) {
   if (!HaveCapability(CAP_SYS_ADMIN)) return;  // Skip test.
   ScopedTempDir tmpdir("/tmp/quipper_tmp.");
   ScopedTempDir mntdir("/tmp/quipper_mnt.");

https://crbug.com/1000545

--- a/perf_serializer_test.cc
+++ b/perf_serializer_test.cc
@@ -452,7 +452,7 @@ TEST_P(SerializePerfDataFiles, TestBuildIDs) {
   EXPECT_TRUE(deserializer.Deserialize(perf_data_proto));
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesTraceMetadata) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesTraceMetadata) {
   std::stringstream input;
 
   const size_t data_size =
@@ -496,7 +496,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesTraceMetadata) {
   EXPECT_EQ(tracing_metadata_str, deserializer.tracing_data());
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesPerfEventAttrEvent) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesPerfEventAttrEvent) {
   std::stringstream input;
 
   // header
@@ -536,7 +536,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesPerfEventAttrEvent) {
   EXPECT_EQ(0, perf_data_proto.events().size());
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesPerfFileAttr) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesPerfFileAttr) {
   std::stringstream input;
 
   // header
@@ -579,7 +579,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesPerfFileAttr) {
   EXPECT_EQ(0, perf_data_proto.events().size());
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesMmapEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesMmapEvents) {
   std::stringstream input;
 
   // header
@@ -646,7 +646,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesMmapEvents) {
   }
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesAuxtraceInfoEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesAuxtraceInfoEvents) {
   std::stringstream input;
 
   // header
@@ -688,7 +688,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesAuxtraceInfoEvents) {
   }
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesAuxtraceEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesAuxtraceEvents) {
   std::stringstream input;
 
   // header
@@ -729,7 +729,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesAuxtraceEvents) {
   }
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesAuxtraceErrorEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesAuxtraceErrorEvents) {
   std::stringstream input;
 
   // header
@@ -789,7 +789,7 @@ TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesAuxtraceErrorEvents)
   EXPECT_TRUE(matches) << difference;
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesThreadMapEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesThreadMapEvents) {
   std::stringstream input;
 
   // header
@@ -835,7 +835,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesThreadMapEvents) {
   }
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesStatConfigEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesStatConfigEvents) {
   std::stringstream input;
 
   // header
@@ -905,7 +905,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesStatConfigEvents) {
   EXPECT_TRUE(matches) << difference;
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesStatEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesStatEvents) {
   std::stringstream input;
 
   // header
@@ -956,7 +956,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesStatEvents) {
   EXPECT_TRUE(matches) << difference;
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesStatRoundEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesStatRoundEvents) {
   std::stringstream input;
 
   // header
@@ -1004,7 +1004,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesStatRoundEvents) {
   EXPECT_TRUE(matches) << difference;
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesTimeConvEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesTimeConvEvents) {
   std::stringstream input;
 
   // header
@@ -1042,7 +1042,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesTimeConvEvents) {
 }
 
 // Regression test for http://crbug.com/501004.
-TEST(PerfSerializerTest, SerializesAndDeserializesBuildIDs) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesBuildIDs) {
   std::stringstream input;
 
   // header
@@ -1173,7 +1173,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesBuildIDs) {
 }
 
 // Regression test for http://crbug.com/500746.
-TEST(PerfSerializerTest, SerializesAndDeserializesForkAndExitEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesForkAndExitEvents) {
   std::stringstream input;
 
   // header
@@ -1282,7 +1282,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesForkAndExitEvents) {
   }
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesContextSwitchEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesContextSwitchEvents) {
   std::stringstream input;
 
   // header
@@ -1368,7 +1368,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesContextSwitchEvents) {
   }
 }
 
-TEST(PerfSerializerTest, SerializesAndDeserializesNamespacesEvents) {
+TEST(PerfSerializerTest, DISABLED_SerializesAndDeserializesNamespacesEvents) {
   std::stringstream input;
 
   // header
@@ -1425,7 +1425,7 @@ TEST(PerfSerializerTest, SerializesAndDeserializesNamespacesEvents) {
 }
 
 // Regression test for http://crbug.com/500746.
-TEST(PerfSerializerTest, DeserializeLegacyExitEvents) {
+TEST(PerfSerializerTest, DISABLED_DeserializeLegacyExitEvents) {
   std::stringstream input;
 
   // header

https://crbug.com/1021952

--- a/perf_recorder_test.cc
+++ b/perf_recorder_test.cc
@@ -41,7 +41,7 @@ class PerfRecorderTest : public ::testing::Test {
   PerfRecorder perf_recorder_;
 };

-TEST_F(PerfRecorderTest, RecordToProtobuf) {
+TEST_F(PerfRecorderTest, DISABLED_RecordToProtobuf) {
   // Read perf data using the PerfReader class.
   // Dump it to a string and convert to a protobuf.
   // Read the protobuf, and reconstruct the perf data.
@@ -69,7 +69,7 @@ TEST_F(PerfRecorderTest, RecordToProtobu
   EXPECT_EQ("0.2", command.Get(6).value());
 }

-TEST_F(PerfRecorderTest, StatToProtobuf) {
+TEST_F(PerfRecorderTest, DISABLED_StatToProtobuf) {
   // Run perf stat and verify output.
   string output_string;
   EXPECT_TRUE(perf_recorder_.RunCommandAndGetSerializedOutput(
@@ -81,7 +81,7 @@ TEST_F(PerfRecorderTest, StatToProtobuf)
   EXPECT_GT(stat.line_size(), 0);
 }

-TEST_F(PerfRecorderTest, MemRecordToProtobuf) {
+TEST_F(PerfRecorderTest, DISABLED_MemRecordToProtobuf) {
   if (!IsPerfMemRecordAvailable()) return;

   // Run perf mem record and verify output.
@@ -94,7 +94,7 @@ TEST_F(PerfRecorderTest, MemRecordToProt
   ASSERT_TRUE(perf_data_proto.ParseFromString(output_string));
 }

-TEST_F(PerfRecorderTest, StatSingleEvent) {
+TEST_F(PerfRecorderTest, DISABLED_StatSingleEvent) {
   string output_string;
   ASSERT_TRUE(perf_recorder_.RunCommandAndGetSerializedOutput(
       {"perf", "stat", "-a", "-e", "cpu-clock"}, 0.2, &output_string));
@@ -118,7 +118,7 @@ TEST_F(PerfRecorderTest, StatSingleEvent
   EXPECT_EQ("cpu-clock", stat.line(0).event_name());
 }

-TEST_F(PerfRecorderTest, StatMultipleEvents) {
+TEST_F(PerfRecorderTest, DISABLED_StatMultipleEvents) {
   string output_string;
   ASSERT_TRUE(perf_recorder_.RunCommandAndGetSerializedOutput(
       {"perf", "stat", "-a", "-e", "cpu-clock", "-e", "context-switches", "-e",
@@ -173,7 +173,7 @@ TEST_F(PerfRecorderTest, StatMultipleEve
   EXPECT_EQ("page-faults", stat.line(3).event_name());
 }

-TEST_F(PerfRecorderTest, DontAllowCommands) {
+TEST_F(PerfRecorderTest, DISABLED_DontAllowCommands) {
   string output_string;
   EXPECT_FALSE(perf_recorder_.RunCommandAndGetSerializedOutput(
       {"perf", "record", "--", "sh", "-c", "echo 'malicious'"}, 0.2,
@@ -183,7 +183,7 @@ TEST_F(PerfRecorderTest, DontAllowComman
       &output_string));
 }

-TEST(PerfRecorderNoPerfTest, FailsIfPerfDoesntExist) {
+TEST(PerfRecorderNoPerfTest, DISABLED_FailsIfPerfDoesntExist) {
   string output_string;
   PerfRecorder perf_recorder({"sudo", "/doesnt-exist/usr/not-bin/not-perf"});
   EXPECT_FALSE(perf_recorder.RunCommandAndGetSerializedOutput(
