Home | History | Annotate | Download | only in base
      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 "google_apis/gcm/base/mcs_util.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/memory/scoped_ptr.h"
      9 #include "base/run_loop.h"
     10 #include "base/strings/string_number_conversions.h"
     11 #include "testing/gtest/include/gtest/gtest.h"
     12 
     13 namespace gcm {
     14 namespace {
     15 
     16 const uint64 kAuthId = 4421448356646222460;
     17 const uint64 kAuthToken = 12345;
     18 
     19 // Build a login request protobuf.
     20 TEST(MCSUtilTest, BuildLoginRequest) {
     21   scoped_ptr<mcs_proto::LoginRequest> login_request =
     22       BuildLoginRequest(kAuthId, kAuthToken, "1.0");
     23   ASSERT_EQ("chrome-1.0", login_request->id());
     24   ASSERT_EQ(base::Uint64ToString(kAuthToken), login_request->auth_token());
     25   ASSERT_EQ(base::Uint64ToString(kAuthId), login_request->user());
     26   ASSERT_EQ("android-3d5c23dac2a1fa7c", login_request->device_id());
     27   ASSERT_EQ("new_vc", login_request->setting(0).name());
     28   ASSERT_EQ("1", login_request->setting(0).value());
     29   // TODO(zea): test the other fields once they have valid values.
     30 }
     31 
     32 // Test building a protobuf and extracting the tag from a protobuf.
     33 TEST(MCSUtilTest, ProtobufToTag) {
     34   for (size_t i = 0; i < kNumProtoTypes; ++i) {
     35     scoped_ptr<google::protobuf::MessageLite> protobuf =
     36         BuildProtobufFromTag(i);
     37     if (!protobuf.get())  // Not all tags have protobuf definitions.
     38       continue;
     39     ASSERT_EQ((int)i, GetMCSProtoTag(*protobuf)) << "Type " << i;
     40   }
     41 }
     42 
     43 // Test getting and setting persistent ids.
     44 TEST(MCSUtilTest, PersistentIds) {
     45   COMPILE_ASSERT(kNumProtoTypes == 16U, UpdatePersistentIds);
     46   const int kTagsWithPersistentIds[] = {
     47     kIqStanzaTag,
     48     kDataMessageStanzaTag
     49   };
     50   for (size_t i = 0; i < arraysize(kTagsWithPersistentIds); ++i) {
     51     int tag = kTagsWithPersistentIds[i];
     52     scoped_ptr<google::protobuf::MessageLite> protobuf =
     53         BuildProtobufFromTag(tag);
     54     ASSERT_TRUE(protobuf.get());
     55     SetPersistentId(base::IntToString(tag), protobuf.get());
     56     int get_val = 0;
     57     base::StringToInt(GetPersistentId(*protobuf), &get_val);
     58     ASSERT_EQ(tag, get_val);
     59   }
     60 }
     61 
     62 // Test getting and setting stream ids.
     63 TEST(MCSUtilTest, StreamIds) {
     64   COMPILE_ASSERT(kNumProtoTypes == 16U, UpdateStreamIds);
     65   const int kTagsWithStreamIds[] = {
     66     kIqStanzaTag,
     67     kDataMessageStanzaTag,
     68     kHeartbeatPingTag,
     69     kHeartbeatAckTag,
     70     kLoginResponseTag,
     71   };
     72   for (size_t i = 0; i < arraysize(kTagsWithStreamIds); ++i) {
     73     int tag = kTagsWithStreamIds[i];
     74     scoped_ptr<google::protobuf::MessageLite> protobuf =
     75         BuildProtobufFromTag(tag);
     76     ASSERT_TRUE(protobuf.get());
     77     SetLastStreamIdReceived(tag, protobuf.get());
     78     int get_id = GetLastStreamIdReceived(*protobuf);
     79     ASSERT_EQ(tag, get_id);
     80   }
     81 }
     82 
     83 }  // namespace
     84 }  // namespace gcm
     85