12fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// Copyright (C) 2013 Google Inc. 22fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// 32fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// Licensed under the Apache License, Version 2.0 (the "License"); 42fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// you may not use this file except in compliance with the License. 52fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// You may obtain a copy of the License at 62fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// 72fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// http://www.apache.org/licenses/LICENSE-2.0 82fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// 92fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// Unless required by applicable law or agreed to in writing, software 102fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// distributed under the License is distributed on an "AS IS" BASIS, 112fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 122fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// See the License for the specific language governing permissions and 132fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// limitations under the License. 142fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 152fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org#include "validating_util.h" 162fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 172fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org#include <string> 182fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 192fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org#include <gtest/gtest.h> 202fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 212fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org#define ITOA_HELPER(i) #i 222fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org#define ITOA(i) ITOA_HELPER(i) 232fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 242fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org#define DATA "{'foo': 'bar'}" 252fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org#define TIMESTAMP 1388001600 262fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org#define TIMESTAMP_HALF_MONTH_AGO 1386705600 272fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org#define TIMESTAMP_TWO_MONTHS_AGO 1382817600 282fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org#define CHECKSUM "dd63dafcbd4d5b28badfcaf86fb6fcdb" 292fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 302fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgnamespace { 312fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 322fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgusing i18n::addressinput::ValidatingUtil; 332fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 342fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// The data being wrapped. 352fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgconst char kUnwrappedData[] = DATA; 362fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 372fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// The timestamp for the wrapped data. 382fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgconst time_t kTimestamp = TIMESTAMP; 392fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 402fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// The checksum and data together. 412fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgconst char kChecksummedData[] = "checksum=" CHECKSUM "\n" 422fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org DATA; 432fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 442fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// "Randomly" corrupted checksummed data. The "m" in "checksum" is capitalized. 452fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgconst char kCorruptedChecksummedData[] = "checksuM=" CHECKSUM "\n" 462fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org DATA; 472fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 482fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// The checksum in the middle of data. 492fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgconst char kChecksumInMiddle[] = DATA "\n" 502fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org "checksum=" CHECKSUM "\n" 512fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org DATA; 522fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 532fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// The file as it is stored on disk. 542fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgconst char kWrappedData[] = "timestamp=" ITOA(TIMESTAMP) "\n" 552fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org "checksum=" CHECKSUM "\n" 562fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org DATA; 572fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 582fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// "Randomly" corrupted file. The "p" in "timestamp" is capitalized. 592fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgconst char kCorruptedWrappedData[] = "timestamP=" ITOA(TIMESTAMP) "\n" 602fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org "checksum=" CHECKSUM "\n" 612fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org DATA; 622fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 632fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// The timestamp in the middle of data. 642fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgconst char kTimestampInMiddle[] = DATA "\n" 652fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org "timestamp=" ITOA(TIMESTAMP) "\n" 662fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org DATA; 672fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 682fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// A recent timestamp and data together. 692fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgconst char kTimestampHalfMonthAgo[] = 702fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org "timestamp=" ITOA(TIMESTAMP_HALF_MONTH_AGO) "\n" 712fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org DATA; 722fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 732fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org// A stale timestamp and data together. 742fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgconst char kTimestampTwoMonthsAgo[] = 752fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org "timestamp=" ITOA(TIMESTAMP_TWO_MONTHS_AGO) "\n" 762fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org DATA; 772fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 782fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapChecksum_CorruptedData) { 792fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data(kCorruptedChecksummedData); 802fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_FALSE(ValidatingUtil::UnwrapChecksum(&data)); 812fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 822fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 832fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapChecksum_EmptyString) { 842fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data; 852fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_FALSE(ValidatingUtil::UnwrapChecksum(&data)); 862fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 872fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 882fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapChecksum_GarbageData) { 892fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data("garbage"); 902fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_FALSE(ValidatingUtil::UnwrapChecksum(&data)); 912fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 922fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 932fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapChecksum_InMiddle) { 942fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data(kChecksumInMiddle); 952fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_FALSE(ValidatingUtil::UnwrapChecksum(&data)); 962fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 972fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 982fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapChecksum) { 992fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data(kChecksummedData); 1002fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_TRUE(ValidatingUtil::UnwrapChecksum(&data)); 1012fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_EQ(kUnwrappedData, data); 1022fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 1032fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 1042fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapTimestamp_CorruptedData) { 1052fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data(kCorruptedWrappedData); 1062fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_FALSE(ValidatingUtil::UnwrapTimestamp(&data, kTimestamp)); 1072fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 1082fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 1092fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapTimestamp_EmptyString) { 1102fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data; 1112fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_FALSE(ValidatingUtil::UnwrapTimestamp(&data, kTimestamp)); 1122fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 1132fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 1142fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapTimestamp_GarbageData) { 1152fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data("garbage"); 1162fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_FALSE(ValidatingUtil::UnwrapTimestamp(&data, kTimestamp)); 1172fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 1182fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 1192fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapTimestamp_InMiddle) { 1202fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data(kTimestampInMiddle); 1212fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_FALSE(ValidatingUtil::UnwrapTimestamp(&data, kTimestamp)); 1222fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 1232fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 1242fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapTimestamp_Recent) { 1252fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data(kTimestampHalfMonthAgo); 1262fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_TRUE(ValidatingUtil::UnwrapTimestamp(&data, kTimestamp)); 1272fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_EQ(kUnwrappedData, data); 1282fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 1292fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 1302fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapTimestamp_Stale) { 1312fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data(kTimestampTwoMonthsAgo); 1322fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_FALSE(ValidatingUtil::UnwrapTimestamp(&data, kTimestamp)); 1332fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 1342fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 1352fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, UnwrapTimestamp) { 1362fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org std::string data(kWrappedData); 1372fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_TRUE(ValidatingUtil::UnwrapTimestamp(&data, kTimestamp)); 1382fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_EQ(kChecksummedData, data); 1392fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 1402fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 1412fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, Wrap) { 142128ae075bbf50996c1068740746f27430f89136droubert@google.com std::string data = kUnwrappedData; 143128ae075bbf50996c1068740746f27430f89136droubert@google.com ValidatingUtil::Wrap(kTimestamp, &data); 144128ae075bbf50996c1068740746f27430f89136droubert@google.com EXPECT_EQ(kWrappedData, data); 1452fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 1462fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 1472fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.orgTEST(ValidatingUtilTest, WrapUnwrapIt) { 148128ae075bbf50996c1068740746f27430f89136droubert@google.com std::string data = kUnwrappedData; 149128ae075bbf50996c1068740746f27430f89136droubert@google.com ValidatingUtil::Wrap(kTimestamp, &data); 1502fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_TRUE(ValidatingUtil::UnwrapTimestamp(&data, kTimestamp)); 1512fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_EQ(kChecksummedData, data); 1522fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_TRUE(ValidatingUtil::UnwrapChecksum(&data)); 1532fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org EXPECT_EQ(kUnwrappedData, data); 1542fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} 1552fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org 1562fefd83dd2c65ee585a2aa05e4856eb4d0e93f0brouslan@chromium.org} // namespace 157