Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/toolkit/components/url-classifier/tests/gtest/TestClassifier.cpp
Line
Count
Source (jump to first uncovered line)
1
/* This Source Code Form is subject to the terms of the Mozilla Public
2
 * License, v. 2.0. If a copy of the MPL was not distributed with this
3
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5
#include "Common.h"
6
#include "Classifier.h"
7
#include "LookupCacheV4.h"
8
9
0
#define GTEST_TABLE_V4 NS_LITERAL_CSTRING("gtest-malware-proto")
10
0
#define GTEST_TABLE_V2 NS_LITERAL_CSTRING("gtest-malware-simple")
11
12
typedef nsCString _Fragment;
13
typedef nsTArray<nsCString> _PrefixArray;
14
15
static RefPtr<Classifier>
16
GetClassifier()
17
0
{
18
0
  nsCOMPtr<nsIFile> file;
19
0
  NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR, getter_AddRefs(file));
20
0
21
0
  RefPtr<Classifier> classifier = new Classifier();
22
0
  nsresult rv = classifier->Open(*file);
23
0
  EXPECT_TRUE(rv == NS_OK);
24
0
25
0
  return classifier;
26
0
}
27
28
static nsresult
29
SetupLookupCacheV4(RefPtr<Classifier> classifier,
30
                   const _PrefixArray& aPrefixArray,
31
                   const nsACString& aTable)
32
0
{
33
0
  RefPtr<LookupCache> lookupCache = classifier->GetLookupCache(aTable, false);
34
0
  if (!lookupCache) {
35
0
    return NS_ERROR_FAILURE;
36
0
  }
37
0
  RefPtr<LookupCacheV4> lookupCacheV4 = LookupCache::Cast<LookupCacheV4>(lookupCache);
38
0
  if (!lookupCacheV4) {
39
0
    return NS_ERROR_FAILURE;
40
0
  }
41
0
42
0
  PrefixStringMap map;
43
0
  PrefixArrayToPrefixStringMap(aPrefixArray, map);
44
0
45
0
  return lookupCacheV4->Build(map);
46
0
}
47
48
static nsresult
49
SetupLookupCacheV2(RefPtr<Classifier> classifier,
50
                   const _PrefixArray& aPrefixArray,
51
                   const nsACString& aTable)
52
0
{
53
0
  RefPtr<LookupCache> lookupCache = classifier->GetLookupCache(aTable, false);
54
0
  if (!lookupCache) {
55
0
    return NS_ERROR_FAILURE;
56
0
  }
57
0
  RefPtr<LookupCacheV2> lookupCacheV2 =
58
0
    LookupCache::Cast<LookupCacheV2>(lookupCache);
59
0
  if (!lookupCacheV2) {
60
0
    return NS_ERROR_FAILURE;
61
0
  }
62
0
63
0
  AddPrefixArray prefixes;
64
0
  AddCompleteArray completions;
65
0
  nsresult rv = PrefixArrayToAddPrefixArrayV2(aPrefixArray, prefixes);
66
0
  if (NS_FAILED(rv)) {
67
0
    return rv;
68
0
  }
69
0
70
0
  EntrySort(prefixes);
71
0
  return lookupCacheV2->Build(prefixes, completions);
72
0
}
73
74
static void
75
TestReadNoiseEntries(RefPtr<Classifier> classifier,
76
                     const _PrefixArray& aPrefixArray,
77
                     const nsCString& aTable,
78
                     const nsCString& aFragment)
79
0
{
80
0
  Completion lookupHash;
81
0
  lookupHash.FromPlaintext(aFragment);
82
0
  RefPtr<LookupResult> result = new LookupResult;
83
0
  result->hash.complete = lookupHash;
84
0
85
0
  PrefixArray noiseEntries;
86
0
  uint32_t noiseCount = 3;
87
0
  nsresult rv;
88
0
  rv = classifier->ReadNoiseEntries(result->hash.fixedLengthPrefix,
89
0
                                    aTable, noiseCount,
90
0
                                    noiseEntries);
91
0
  ASSERT_TRUE(rv == NS_OK);
92
0
  EXPECT_TRUE(noiseEntries.Length() > 0);
93
0
94
0
  for (uint32_t i = 0; i < noiseEntries.Length(); i++) {
95
0
    // Test the noise entry should not equal the "real" hash request
96
0
    EXPECT_NE(noiseEntries[i], result->hash.fixedLengthPrefix);
97
0
    // Test the noise entry should exist in the cached prefix array
98
0
    nsAutoCString partialHash;
99
0
    partialHash.Assign(reinterpret_cast<char*>(&noiseEntries[i]), PREFIX_SIZE);
100
0
    EXPECT_TRUE(aPrefixArray.Contains(partialHash));
101
0
  }
102
0
103
0
}
104
105
TEST(UrlClassifier, ReadNoiseEntriesV4)
106
0
{
107
0
  RefPtr<Classifier> classifier = GetClassifier();
108
0
  _PrefixArray array = { GeneratePrefix(_Fragment("bravo.com/"), 5),
109
0
                         GeneratePrefix(_Fragment("browsing.com/"), 9),
110
0
                         GeneratePrefix(_Fragment("gound.com/"), 4),
111
0
                         GeneratePrefix(_Fragment("small.com/"), 4),
112
0
                         GeneratePrefix(_Fragment("gdfad.com/"), 4),
113
0
                         GeneratePrefix(_Fragment("afdfound.com/"), 4),
114
0
                         GeneratePrefix(_Fragment("dffa.com/"), 4),
115
0
                       };
116
0
  array.Sort();
117
0
118
0
  nsresult rv;
119
0
  rv = SetupLookupCacheV4(classifier, array, GTEST_TABLE_V4);
120
0
  ASSERT_TRUE(rv == NS_OK);
121
0
122
0
  TestReadNoiseEntries(classifier, array, GTEST_TABLE_V4, _Fragment("gound.com/"));
123
0
}
124
125
TEST(UrlClassifier, ReadNoiseEntriesV2)
126
0
{
127
0
  RefPtr<Classifier> classifier = GetClassifier();
128
0
  _PrefixArray array = { GeneratePrefix(_Fragment("helloworld.com/"), 4),
129
0
                         GeneratePrefix(_Fragment("firefox.com/"), 4),
130
0
                         GeneratePrefix(_Fragment("chrome.com/"), 4),
131
0
                         GeneratePrefix(_Fragment("safebrowsing.com/"), 4),
132
0
                         GeneratePrefix(_Fragment("opera.com/"), 4),
133
0
                         GeneratePrefix(_Fragment("torbrowser.com/"), 4),
134
0
                         GeneratePrefix(_Fragment("gfaads.com/"), 4),
135
0
                         GeneratePrefix(_Fragment("qggdsas.com/"), 4),
136
0
                         GeneratePrefix(_Fragment("nqtewq.com/"), 4),
137
0
                       };
138
0
139
0
  nsresult rv;
140
0
  rv = SetupLookupCacheV2(classifier, array, GTEST_TABLE_V2);
141
0
  ASSERT_TRUE(rv == NS_OK);
142
0
143
0
  TestReadNoiseEntries(classifier, array, GTEST_TABLE_V2, _Fragment("helloworld.com/"));
144
0
}