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.
4
5#include "chrome/browser/safe_browsing/incident_reporting/binary_integrity_incident_handlers.h"
6
7#include "base/memory/scoped_ptr.h"
8#include "chrome/common/safe_browsing/csd.pb.h"
9#include "testing/gtest/include/gtest/gtest.h"
10
11namespace safe_browsing {
12
13namespace {
14
15scoped_ptr<ClientIncidentReport_IncidentData> MakeIncident() {
16  scoped_ptr<ClientIncidentReport_IncidentData> incident(
17      new ClientIncidentReport_IncidentData);
18
19  incident->mutable_binary_integrity()->set_file_basename("foo");
20
21  // Set the signature.
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();
26
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},
31  };
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]));
36  }
37
38  return incident.Pass();
39}
40
41}  // namespace
42
43TEST(BinaryIntegrityIncidentHandlersTest, GetKeyIsFile) {
44  ClientIncidentReport_IncidentData incident;
45
46  incident.mutable_binary_integrity()->set_file_basename("foo");
47  ASSERT_EQ(std::string("foo"), GetBinaryIntegrityIncidentKey(incident));
48}
49
50TEST(BinaryIntegrityIncidentHandlersTest, SameIncidentSameDigest) {
51  scoped_ptr<ClientIncidentReport_IncidentData> incident(MakeIncident());
52
53  uint32_t digest = GetBinaryIntegrityIncidentDigest(*incident);
54  ASSERT_EQ(digest, GetBinaryIntegrityIncidentDigest(*MakeIncident()));
55}
56
57TEST(BinaryIntegrityIncidentHandlersTest, DifferentIncidentDifferentDigest) {
58  scoped_ptr<ClientIncidentReport_IncidentData> incident(MakeIncident());
59
60  uint32_t digest = GetBinaryIntegrityIncidentDigest(*incident);
61
62  scoped_ptr<ClientIncidentReport_IncidentData> incident2(MakeIncident());
63  incident2->mutable_binary_integrity()->set_file_basename("bar");
64
65  ASSERT_NE(digest, GetBinaryIntegrityIncidentDigest(*incident2));
66}
67
68}  // namespace safe_browsing
69