1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/safe_browsing/incident_reporting/binary_integrity_incident_handlers.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "chrome/common/safe_browsing/csd.pb.h"
9 #include "testing/gtest/include/gtest/gtest.h"
11 namespace safe_browsing {
15 scoped_ptr<ClientIncidentReport_IncidentData> MakeIncident() {
16 scoped_ptr<ClientIncidentReport_IncidentData> incident(
17 new ClientIncidentReport_IncidentData);
19 incident->mutable_binary_integrity()->set_file_basename("foo");
22 incident->mutable_binary_integrity()->mutable_signature()->set_trusted(true);
23 ClientDownloadRequest_CertificateChain* certificate_chain =
24 incident->mutable_binary_integrity()->mutable_signature()
25 ->add_certificate_chain();
27 // Fill the certificate chain with 2 elements.
28 const unsigned char certificates[][5] = {
29 {42, 255, 100, 53, 2},
30 {64, 33, 51, 91, 210},
32 for (size_t i = 0; i < arraysize(certificates); ++i) {
33 ClientDownloadRequest_CertificateChain_Element* element =
34 certificate_chain->add_element();
35 element->set_certificate(certificates[i], arraysize(certificates[i]));
38 return incident.Pass();
43 TEST(BinaryIntegrityIncidentHandlersTest, GetKeyIsFile) {
44 ClientIncidentReport_IncidentData incident;
46 incident.mutable_binary_integrity()->set_file_basename("foo");
47 ASSERT_EQ(std::string("foo"), GetBinaryIntegrityIncidentKey(incident));
50 TEST(BinaryIntegrityIncidentHandlersTest, SameIncidentSameDigest) {
51 scoped_ptr<ClientIncidentReport_IncidentData> incident(MakeIncident());
53 uint32_t digest = GetBinaryIntegrityIncidentDigest(*incident);
54 ASSERT_EQ(digest, GetBinaryIntegrityIncidentDigest(*MakeIncident()));
57 TEST(BinaryIntegrityIncidentHandlersTest, DifferentIncidentDifferentDigest) {
58 scoped_ptr<ClientIncidentReport_IncidentData> incident(MakeIncident());
60 uint32_t digest = GetBinaryIntegrityIncidentDigest(*incident);
62 scoped_ptr<ClientIncidentReport_IncidentData> incident2(MakeIncident());
63 incident2->mutable_binary_integrity()->set_file_basename("bar");
65 ASSERT_NE(digest, GetBinaryIntegrityIncidentDigest(*incident2));
68 } // namespace safe_browsing