root/cloud_print/gcp20/prototype/x_privet_token_unittest.cc

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. TEST
  2. TEST
  3. TEST

// Copyright 2013 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 "cloud_print/gcp20/prototype/x_privet_token.h"

#include <stdio.h>

#include "base/base64.h"
#include "base/basictypes.h"
#include "base/format_macros.h"
#include "base/logging.h"
#include "base/sha1.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
#include "testing/gtest/include/gtest/gtest.h"

TEST(XPrivetTokenTest, Generation) {
  std::string secret = "E3E92296-E290-4E77-B678-6AEF256C30C8";
  uint64 gen_time = 1372444784;
  uint64 issue_time = gen_time;

  XPrivetToken xtoken(secret, base::Time::FromTimeT(gen_time));

  std::string issue_time_str = base::StringPrintf("%" PRIu64, issue_time);
  std::string sha1_val = base::SHA1HashString(secret + ":" + issue_time_str);

  ASSERT_STRCASEEQ("2216828f9eefc3931c1b9a110dcca3dbec23571d",
                   base::HexEncode(sha1_val.data(), sha1_val.size()).c_str());

  std::string base64_val;
  base::Base64Encode(sha1_val, &base64_val);
  std::string token = base64_val + ":" + issue_time_str;

  ASSERT_EQ(token, xtoken.GenerateXTokenWithTime(issue_time));

  EXPECT_NE(xtoken.GenerateXTokenWithTime(issue_time),
            xtoken.GenerateXTokenWithTime(issue_time + 1));
}

TEST(XPrivetTokenTest, CheckingValid) {
  base::Time gen_time = base::Time::FromTimeT(1372444784);
  XPrivetToken xtoken("9CEEA1AD-BC24-4D5A-8AB4-A6CE3E0CC4CD", gen_time);

  std::string token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT());
  EXPECT_TRUE(xtoken.CheckValidXToken(token));

  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 1);
  EXPECT_TRUE(xtoken.CheckValidXToken(token));

  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 55);
  EXPECT_TRUE(xtoken.CheckValidXToken(token));

  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 60*60 - 5);
  EXPECT_TRUE(xtoken.CheckValidXToken(token));

  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 60*60 + 10);
  EXPECT_TRUE(xtoken.CheckValidXToken(token));

  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 - 1);
  EXPECT_TRUE(xtoken.CheckValidXToken(token));
}

TEST(XPrivetTokenTest, CheckingInvalid) {
  base::Time gen_time = base::Time::FromTimeT(1372444784);
  XPrivetToken xtoken("9CEEA1AD-BC24-4D5A-8AB4-A6CE3E0CC4CD", gen_time);

  // Meaningless tokens:

  std::string token = "CEEA1AD9CEEA1AD9CEEA1AD9CEEA1AD";
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  base::Base64Encode("CEEA1AD9CEEA1AD9CEEA1AD9CEEA1AD", &token);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  base::Base64Encode("CEEA1AD9CEEA:1AD9CEEA1AD9CEEA1AD", &token);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  base::Base64Encode("CEEA1AD9CEEA:1AD9CEEA1AD9:CEEA1AD", &token);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  base::Base64Encode("CEEA1AD9CEEA:123456", &token);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  base::Base64Encode("CEEA1AD9CEEA:", &token);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  base::Base64Encode("CEEA1AD9CEEA:1372444784", &token);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  EXPECT_FALSE(xtoken.CheckValidXToken(""));

  // Expired tokens:

  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 + 1);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 7*24*60*60 - 1023);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  // Tokens with different secret:

  XPrivetToken another("6F02AC4E-6F37-4078-AF42-5EE5D8180284", gen_time);

  token = another.GenerateXTokenWithTime(gen_time.ToTimeT() - 24*60*60 - 1);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  token = another.GenerateXTokenWithTime(gen_time.ToTimeT() - 24*60*60 + 1);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  token = another.GenerateXTokenWithTime(gen_time.ToTimeT());
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  token = another.GenerateXTokenWithTime(gen_time.ToTimeT() + 1);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  token = another.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 - 1);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));

  token = another.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 + 1);
  EXPECT_FALSE(xtoken.CheckValidXToken(token));
}


/* [<][>][^][v][top][bottom][index][help] */