blob: e59f4d41fdfb814eb5c443e77a5552504b9af895 [file] [log] [blame]
// Copyright 2015 The Goma 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 "hash_rewrite_parser.h"
#include <map>
#include <string>
#include <utility>
#include <gtest/gtest.h>
namespace devtools_goma {
TEST(ParseRewriteRuleTest, ShouldParseEmptyFile) {
std::map<std::string,std::string> mapping;
EXPECT_TRUE(ParseRewriteRule("", &mapping));
EXPECT_TRUE(mapping.empty());
}
TEST(ParseRewriteRuleTest, ShouldParseEmptyLines) {
std::map<std::string,std::string> mapping;
EXPECT_TRUE(ParseRewriteRule("\n\n\n", &mapping));
EXPECT_TRUE(mapping.empty());
}
TEST(ParseRewriteRuleTest, ShouldParseOnelineFile) {
std::map<std::string,std::string> mapping;
std::map<std::string,std::string> expected;
ASSERT_TRUE(expected.insert(std::make_pair(
"b5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f",
"b8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678"
)).second);
EXPECT_TRUE(ParseRewriteRule(
"b5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f:"
"b8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678",
&mapping));
EXPECT_FALSE(mapping.empty());
EXPECT_EQ(expected, mapping);
}
TEST(ParseRewriteRuleTest, ShouldParseTwolineFile) {
std::map<std::string,std::string> mapping;
std::map<std::string,std::string> expected;
ASSERT_TRUE(expected.insert(std::make_pair(
"a5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f",
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678"
)).second);
ASSERT_TRUE(expected.insert(std::make_pair(
"b5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f",
"b8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678"
)).second);
EXPECT_TRUE(ParseRewriteRule(
"a5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f:"
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678\n"
"b5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f:"
"b8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678\n",
&mapping));
EXPECT_FALSE(mapping.empty());
EXPECT_EQ(expected, mapping);
}
TEST(ParseRewriteRuleTest, ShouldReturnFalseIfNoDelimiter) {
std::map<std::string,std::string> mapping;
EXPECT_FALSE(ParseRewriteRule(
"a5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f",
&mapping));
}
TEST(ParseRewriteRuleTest, ShouldBeErrorIfNotSha256) {
std::map<std::string,std::string> mapping;
// Too short or long.
EXPECT_FALSE(ParseRewriteRule(
"a:"
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678\n",
&mapping));
EXPECT_FALSE(ParseRewriteRule(
"a5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f:"
"a\n",
&mapping));
EXPECT_FALSE(ParseRewriteRule(
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678abc:\n"
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678\n",
&mapping));
EXPECT_FALSE(ParseRewriteRule(
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678:\n"
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678abc\n",
&mapping));
// not hexdeciaml.
EXPECT_FALSE(ParseRewriteRule(
"ghi3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f:"
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678\n",
&mapping));
EXPECT_FALSE(ParseRewriteRule(
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678:\n"
"g8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678\n",
&mapping));
}
TEST(ParseRewriteRuleTest, ShouldBeErrorForDuplicatedSourceEntry) {
std::map<std::string,std::string> mapping;
EXPECT_FALSE(ParseRewriteRule(
"a5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f:"
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678\n"
"a5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f:"
"b8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678\n",
&mapping));
}
TEST(ParseRewriteRuleTest, ShouldAcceptDuplicatedDestEntry) {
std::map<std::string,std::string> mapping;
std::map<std::string,std::string> expected;
ASSERT_TRUE(expected.insert(std::make_pair(
"a5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f",
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678"
)).second);
ASSERT_TRUE(expected.insert(std::make_pair(
"b5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f",
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678"
)).second);
EXPECT_TRUE(ParseRewriteRule(
"a5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f:"
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678\n"
"b5a3dadbdcafc7902f9502de7f037ec95f6340de8aa0a6b4d9ee74a47379063f:"
"a8a38778b7c56de92f5f14c185104285f62c0dec8aed6e2f552cc73a8e9ac678\n",
&mapping));
EXPECT_FALSE(mapping.empty());
EXPECT_EQ(expected, mapping);
}
} // namespace devtools_goma