x_privet_token_unittest.cc revision a3f7b4e666c476898878fa745f637129375cd889
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "cloud_print/gcp20/prototype/x_privet_token.h" 6 7#include <stdio.h> 8 9#include "base/base64.h" 10#include "base/basictypes.h" 11#include "base/format_macros.h" 12#include "base/logging.h" 13#include "base/sha1.h" 14#include "base/strings/string_number_conversions.h" 15#include "base/strings/stringprintf.h" 16#include "base/time/time.h" 17#include "testing/gtest/include/gtest/gtest.h" 18 19TEST(XPrivetTokenTest, Generation) { 20 std::string secret = "E3E92296-E290-4E77-B678-6AEF256C30C8"; 21 uint64 gen_time = 1372444784; 22 uint64 issue_time = gen_time; 23 24 XPrivetToken xtoken(secret, base::Time::FromTimeT(gen_time)); 25 26 std::string issue_time_str = base::StringPrintf("%"PRIu64, issue_time); 27 std::string sha1_val = base::SHA1HashString(secret + ":" + issue_time_str); 28 29 EXPECT_STRCASEEQ("2216828f9eefc3931c1b9a110dcca3dbec23571d", 30 base::HexEncode(sha1_val.data(), sha1_val.size()).c_str()); 31 32 std::string base64_val; 33 base::Base64Encode(sha1_val + ":" + issue_time_str, &base64_val); 34 35 EXPECT_EQ(base64_val, xtoken.GenerateXTokenWithTime(issue_time)); 36 37 EXPECT_NE(xtoken.GenerateXTokenWithTime(issue_time), 38 xtoken.GenerateXTokenWithTime(issue_time + 1)); 39} 40 41TEST(XPrivetTokenTest, CheckingValid) { 42 base::Time gen_time = base::Time::FromTimeT(1372444784); 43 XPrivetToken xtoken("9CEEA1AD-BC24-4D5A-8AB4-A6CE3E0CC4CD", gen_time); 44 45 std::string token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT()); 46 EXPECT_TRUE(xtoken.CheckValidXToken(token)); 47 48 token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 1); 49 EXPECT_TRUE(xtoken.CheckValidXToken(token)); 50 51 token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 55); 52 EXPECT_TRUE(xtoken.CheckValidXToken(token)); 53 54 token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 60*60 - 5); 55 EXPECT_TRUE(xtoken.CheckValidXToken(token)); 56 57 token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 60*60 + 10); 58 EXPECT_TRUE(xtoken.CheckValidXToken(token)); 59 60 token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 - 1); 61 EXPECT_TRUE(xtoken.CheckValidXToken(token)); 62} 63 64TEST(XPrivetTokenTest, CheckingInvalid) { 65 base::Time gen_time = base::Time::FromTimeT(1372444784); 66 XPrivetToken xtoken("9CEEA1AD-BC24-4D5A-8AB4-A6CE3E0CC4CD", gen_time); 67 68 // Meaningless tokens: 69 70 std::string token = "CEEA1AD9CEEA1AD9CEEA1AD9CEEA1AD"; 71 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 72 73 base::Base64Encode("CEEA1AD9CEEA1AD9CEEA1AD9CEEA1AD", &token); 74 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 75 76 base::Base64Encode("CEEA1AD9CEEA:1AD9CEEA1AD9CEEA1AD", &token); 77 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 78 79 base::Base64Encode("CEEA1AD9CEEA:1AD9CEEA1AD9:CEEA1AD", &token); 80 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 81 82 base::Base64Encode("CEEA1AD9CEEA:123456", &token); 83 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 84 85 base::Base64Encode("CEEA1AD9CEEA:", &token); 86 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 87 88 base::Base64Encode("CEEA1AD9CEEA:1372444784", &token); 89 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 90 91 EXPECT_FALSE(xtoken.CheckValidXToken("")); 92 93 // Expired tokens: 94 95 token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 + 1); 96 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 97 98 token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 7*24*60*60 - 1023); 99 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 100 101 // Tokens with different secret: 102 103 XPrivetToken another("6F02AC4E-6F37-4078-AF42-5EE5D8180284", gen_time); 104 105 token = another.GenerateXTokenWithTime(gen_time.ToTimeT() - 24*60*60 - 1); 106 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 107 108 token = another.GenerateXTokenWithTime(gen_time.ToTimeT() - 24*60*60 + 1); 109 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 110 111 token = another.GenerateXTokenWithTime(gen_time.ToTimeT()); 112 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 113 114 token = another.GenerateXTokenWithTime(gen_time.ToTimeT() + 1); 115 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 116 117 token = another.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 - 1); 118 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 119 120 token = another.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 + 1); 121 EXPECT_FALSE(xtoken.CheckValidXToken(token)); 122} 123 124