blob: bd9246088b2615ea0584a19f28f4fea24c7aa4ae [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "components/update_client/utils.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
using std::string;
namespace {
base::FilePath MakeTestFilePath(const char* file) {
base::FilePath path;
PathService::Get(base::DIR_SOURCE_ROOT, &path);
return path.AppendASCII("components/test/data/update_client")
.AppendASCII(file);
}
} // namespace
namespace update_client {
TEST(UpdateClientUtils, BuildProtocolRequest_DownloadPreference) {
const string emptystr;
// Verifies that an empty |download_preference| is not serialized.
const string request_no_dlpref = BuildProtocolRequest(
emptystr, emptystr, emptystr, emptystr, emptystr, emptystr, emptystr);
EXPECT_EQ(string::npos, request_no_dlpref.find(" dlpref="));
// Verifies that |download_preference| is serialized.
const string request_with_dlpref = BuildProtocolRequest(
emptystr, emptystr, emptystr, emptystr, "some pref", emptystr, emptystr);
EXPECT_NE(string::npos, request_with_dlpref.find(" dlpref=\"some pref\""));
}
TEST(UpdateClientUtils, VerifyFileHash256) {
EXPECT_TRUE(VerifyFileHash256(
MakeTestFilePath("jebgalgnebhfojomionfpkfelancnnkf.crx"),
std::string(
"6fc4b93fd11134de1300c2c0bb88c12b644a4ec0fd7c9b12cb7cc067667bde87")));
EXPECT_FALSE(VerifyFileHash256(
MakeTestFilePath("jebgalgnebhfojomionfpkfelancnnkf.crx"),
std::string("")));
EXPECT_FALSE(VerifyFileHash256(
MakeTestFilePath("jebgalgnebhfojomionfpkfelancnnkf.crx"),
std::string("abcd")));
EXPECT_FALSE(VerifyFileHash256(
MakeTestFilePath("jebgalgnebhfojomionfpkfelancnnkf.crx"),
std::string(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")));
}
// Tests that the brand matches ^[a-zA-Z]{4}?$
TEST(UpdateClientUtils, IsValidBrand) {
// The valid brand code must be empty or exactly 4 chars long.
EXPECT_TRUE(IsValidBrand(std::string("")));
EXPECT_TRUE(IsValidBrand(std::string("TEST")));
EXPECT_TRUE(IsValidBrand(std::string("test")));
EXPECT_TRUE(IsValidBrand(std::string("TEst")));
EXPECT_FALSE(IsValidBrand(std::string("T"))); // Too short.
EXPECT_FALSE(IsValidBrand(std::string("TE"))); //
EXPECT_FALSE(IsValidBrand(std::string("TES"))); //
EXPECT_FALSE(IsValidBrand(std::string("TESTS"))); // Too long.
EXPECT_FALSE(IsValidBrand(std::string("TES1"))); // Has digit.
EXPECT_FALSE(IsValidBrand(std::string(" TES"))); // Begins with white space.
EXPECT_FALSE(IsValidBrand(std::string("TES "))); // Ends with white space.
EXPECT_FALSE(IsValidBrand(std::string("T ES"))); // Contains white space.
EXPECT_FALSE(IsValidBrand(std::string("<TE"))); // Has <.
EXPECT_FALSE(IsValidBrand(std::string("TE>"))); // Has >.
EXPECT_FALSE(IsValidAp(std::string("\""))); // Has "
EXPECT_FALSE(IsValidAp(std::string("\\"))); // Has backslash.
EXPECT_FALSE(IsValidBrand(std::string("\xaa"))); // Has non-ASCII char.
}
// Tests that the ap matches ^[-+_=a-zA-Z0-9]{0,256}$
TEST(UpdateClientUtils, IsValidAp) {
EXPECT_TRUE(IsValidAp(std::string("a=1")));
EXPECT_TRUE(IsValidAp(std::string("")));
EXPECT_TRUE(IsValidAp(std::string("A")));
EXPECT_TRUE(IsValidAp(std::string("Z")));
EXPECT_TRUE(IsValidAp(std::string("a")));
EXPECT_TRUE(IsValidAp(std::string("z")));
EXPECT_TRUE(IsValidAp(std::string("0")));
EXPECT_TRUE(IsValidAp(std::string("9")));
EXPECT_TRUE(IsValidAp(std::string(256, 'a')));
EXPECT_TRUE(IsValidAp(std::string("-+_=")));
EXPECT_FALSE(IsValidAp(std::string(257, 'a'))); // Too long.
EXPECT_FALSE(IsValidAp(std::string(" ap"))); // Begins with white space.
EXPECT_FALSE(IsValidAp(std::string("ap "))); // Ends with white space.
EXPECT_FALSE(IsValidAp(std::string("a p"))); // Contains white space.
EXPECT_FALSE(IsValidAp(std::string("<ap"))); // Has <.
EXPECT_FALSE(IsValidAp(std::string("ap>"))); // Has >.
EXPECT_FALSE(IsValidAp(std::string("\""))); // Has "
EXPECT_FALSE(IsValidAp(std::string("\\"))); // Has backspace.
EXPECT_FALSE(IsValidAp(std::string("\xaa"))); // Has non-ASCII char.
}
TEST(UpdateClientUtils, RemoveUnsecureUrls) {
const GURL test1[] = {GURL("http://foo"), GURL("https://foo")};
std::vector<GURL> urls(std::begin(test1), std::end(test1));
RemoveUnsecureUrls(&urls);
EXPECT_EQ(1u, urls.size());
EXPECT_EQ(urls[0], GURL("https://foo"));
const GURL test2[] = {GURL("https://foo"), GURL("http://foo")};
urls.assign(std::begin(test2), std::end(test2));
RemoveUnsecureUrls(&urls);
EXPECT_EQ(1u, urls.size());
EXPECT_EQ(urls[0], GURL("https://foo"));
const GURL test3[] = {GURL("https://foo"), GURL("https://bar")};
urls.assign(std::begin(test3), std::end(test3));
RemoveUnsecureUrls(&urls);
EXPECT_EQ(2u, urls.size());
EXPECT_EQ(urls[0], GURL("https://foo"));
EXPECT_EQ(urls[1], GURL("https://bar"));
const GURL test4[] = {GURL("http://foo")};
urls.assign(std::begin(test4), std::end(test4));
RemoveUnsecureUrls(&urls);
EXPECT_EQ(0u, urls.size());
const GURL test5[] = {GURL("http://foo"), GURL("http://bar")};
urls.assign(std::begin(test5), std::end(test5));
RemoveUnsecureUrls(&urls);
EXPECT_EQ(0u, urls.size());
}
} // namespace update_client