/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "LookupCacheV4.h" #include "Common.h" #define GTEST_SAFEBROWSING_DIR NS_LITERAL_CSTRING("safebrowsing") #define GTEST_TABLE NS_LITERAL_CSTRING("gtest-malware-proto") typedef nsCString _Fragment; typedef nsTArray _PrefixArray; // Generate a hash prefix from string static const nsCString GeneratePrefix(const _Fragment& aFragment, uint8_t aLength) { Completion complete; nsCOMPtr cryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID); complete.FromPlaintext(aFragment, cryptoHash); nsCString hash; hash.Assign((const char *)complete.buf, aLength); return hash; } static UniquePtr SetupLookupCacheV4(const _PrefixArray& prefixArray) { nsCOMPtr file; NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR, getter_AddRefs(file)); file->AppendNative(GTEST_SAFEBROWSING_DIR); UniquePtr cache = MakeUnique(GTEST_TABLE, EmptyCString(), file); nsresult rv = cache->Init(); EXPECT_EQ(rv, NS_OK); PrefixStringMap map; PrefixArrayToPrefixStringMap(prefixArray, map); rv = cache->Build(map); EXPECT_EQ(rv, NS_OK); return Move(cache); } void TestHasPrefix(const _Fragment& aFragment, bool aExpectedHas, bool aExpectedComplete) { _PrefixArray array = { GeneratePrefix(_Fragment("bravo.com/"), 32), GeneratePrefix(_Fragment("browsing.com/"), 8), GeneratePrefix(_Fragment("gound.com/"), 5), GeneratePrefix(_Fragment("small.com/"), 4) }; RunTestInNewThread([&] () -> void { UniquePtr cache = SetupLookupCacheV4(array); Completion lookupHash; nsCOMPtr cryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID); lookupHash.FromPlaintext(aFragment, cryptoHash); bool has, complete; nsresult rv = cache->Has(lookupHash, &has, &complete); EXPECT_EQ(rv, NS_OK); EXPECT_EQ(has, aExpectedHas); EXPECT_EQ(complete, aExpectedComplete); cache->ClearAll(); }); } TEST(LookupCacheV4, HasComplete) { TestHasPrefix(_Fragment("bravo.com/"), true, true); } TEST(LookupCacheV4, HasPrefix) { TestHasPrefix(_Fragment("browsing.com/"), true, false); } TEST(LookupCacheV4, Nomatch) { TestHasPrefix(_Fragment("nomatch.com/"), false, false); }