blob: fb35c34cb1de1462871350e909994dca4b8cfb14 [file] [log] [blame]
Paul Stewart3ecfa2b2011-07-15 10:47:42 -07001// Copyright (c) 2011 The Chromium OS 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 <endian.h>
6
7#include <gtest/gtest.h>
8
9#include "shill/byte_string.h"
10
11using testing::Test;
12
13namespace shill {
14
15namespace {
16const unsigned char kTest1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Darin Petkove3e1cfa2011-08-11 13:41:17 -070017const unsigned char kTest2[] = { 1, 2, 3, 0xa };
18const char kTest2HexString[] = "0102030A";
19const unsigned int kTest2Uint32 = 0x0102030a;
Paul Stewart3ecfa2b2011-07-15 10:47:42 -070020const unsigned char kTest3[] = { 0, 0, 0, 0 };
Paul Stewartdd7df792011-07-15 11:09:50 -070021const char kTest4[] = "Hello world";
Paul Stewart3ecfa2b2011-07-15 10:47:42 -070022} // namespace {}
23
24class ByteStringTest : public Test {
25};
26
27TEST_F(ByteStringTest, Empty) {
28 uint32 val;
29
30 ByteString bs1(0);
Darin Petkove3e1cfa2011-08-11 13:41:17 -070031 EXPECT_TRUE(bs1.IsEmpty());
Paul Stewart3ecfa2b2011-07-15 10:47:42 -070032 EXPECT_EQ(0, bs1.GetLength());
33 EXPECT_TRUE(bs1.GetData() == NULL);
34 EXPECT_FALSE(bs1.ConvertToNetUInt32(&val));
35 EXPECT_TRUE(bs1.IsZero());
36}
37
38TEST_F(ByteStringTest, NonEmpty) {
39 ByteString bs1(kTest1, sizeof(kTest1));
40 uint32 val;
41
Darin Petkove3e1cfa2011-08-11 13:41:17 -070042 EXPECT_FALSE(bs1.IsEmpty());
43
Paul Stewart3ecfa2b2011-07-15 10:47:42 -070044 EXPECT_EQ(sizeof(kTest1), bs1.GetLength());
45 for (unsigned int i = 0; i < sizeof(kTest1); i++) {
46 EXPECT_EQ(bs1.GetData()[i], kTest1[i]);
47 }
48 EXPECT_TRUE(bs1.GetData() != NULL);
49 EXPECT_FALSE(bs1.ConvertToNetUInt32(&val));
50 EXPECT_FALSE(bs1.IsZero());
51
52 ByteString bs2(kTest2, sizeof(kTest2));
53 EXPECT_EQ(sizeof(kTest2), bs2.GetLength());
54 for (unsigned int i = 0; i < sizeof(kTest2); i++) {
55 EXPECT_EQ(bs2.GetData()[i], kTest2[i]);
56 }
57 EXPECT_TRUE(bs2.GetData() != NULL);
58 EXPECT_FALSE(bs2.IsZero());
59
60 EXPECT_FALSE(bs2.Equals(bs1));
61
62 ByteString bs3(kTest3, sizeof(kTest3));
63 EXPECT_EQ(sizeof(kTest3), bs3.GetLength());
64 for (unsigned int i = 0; i < sizeof(kTest3); i++) {
65 EXPECT_EQ(bs3.GetData()[i], kTest3[i]);
66 }
67 EXPECT_TRUE(bs3.GetData() != NULL);
68 EXPECT_TRUE(bs3.IsZero());
69 EXPECT_FALSE(bs2.Equals(bs1));
70 EXPECT_FALSE(bs3.Equals(bs1));
71
Paul Stewartdd7df792011-07-15 11:09:50 -070072 ByteString bs4(kTest4, false);
73 EXPECT_EQ(strlen(kTest4), bs4.GetLength());
74 EXPECT_EQ(0, memcmp(kTest4, bs4.GetData(), bs4.GetLength()));
75
76 ByteString bs5(kTest4, true);
77 EXPECT_EQ(strlen(kTest4) + 1, bs5.GetLength());
78 EXPECT_EQ(0, memcmp(kTest4, bs5.GetData(), bs5.GetLength()));
79
80 ByteString bs6(kTest1, sizeof(kTest1));
81 EXPECT_TRUE(bs6.Equals(bs1));
Paul Stewart3ecfa2b2011-07-15 10:47:42 -070082}
83
84TEST_F(ByteStringTest, UInt32) {
Darin Petkove3e1cfa2011-08-11 13:41:17 -070085 ByteString bs1 = ByteString::CreateFromNetUInt32(kTest2Uint32);
Paul Stewart3ecfa2b2011-07-15 10:47:42 -070086 uint32 val;
87
88 EXPECT_EQ(4, bs1.GetLength());
89 EXPECT_TRUE(bs1.GetData() != NULL);
90 EXPECT_TRUE(bs1.ConvertToNetUInt32(&val));
Darin Petkove3e1cfa2011-08-11 13:41:17 -070091 EXPECT_EQ(kTest2Uint32, val);
Paul Stewart3ecfa2b2011-07-15 10:47:42 -070092 EXPECT_FALSE(bs1.IsZero());
93
94 ByteString bs2(kTest2, sizeof(kTest2));
95 EXPECT_TRUE(bs1.Equals(bs2));
96 EXPECT_TRUE(bs2.ConvertToNetUInt32(&val));
Darin Petkove3e1cfa2011-08-11 13:41:17 -070097 EXPECT_EQ(kTest2Uint32, val);
Paul Stewart3ecfa2b2011-07-15 10:47:42 -070098
99 ByteString bs3 = ByteString::CreateFromCPUUInt32(0x1020304);
100 EXPECT_EQ(4, bs1.GetLength());
101 EXPECT_TRUE(bs3.GetData() != NULL);
102 EXPECT_TRUE(bs3.ConvertToCPUUInt32(&val));
103 EXPECT_EQ(0x1020304, val);
104 EXPECT_FALSE(bs3.IsZero());
105
106#if __BYTE_ORDER == __LITTLE_ENDIAN
107 EXPECT_FALSE(bs1.Equals(bs3));
108#else
109 EXPECT_TRUE(bs1.Equals(bs3));
110#endif
111}
112
Paul Stewartdd7df792011-07-15 11:09:50 -0700113TEST_F(ByteStringTest, Resize) {
114 ByteString bs1(kTest2, sizeof(kTest2));
115 uint32 val;
116
117 bs1.Resize(sizeof(kTest2) + 10);
118 EXPECT_EQ(sizeof(kTest2) + 10, bs1.GetLength());
119 EXPECT_TRUE(bs1.GetData() != NULL);
120 EXPECT_EQ(0, memcmp(bs1.GetData(), kTest2, sizeof(kTest2)));
121 for (size_t i = sizeof(kTest2); i < sizeof(kTest2) + 10; ++i) {
122 EXPECT_EQ(0, bs1.GetData()[i]);
123 }
124
125 bs1.Resize(sizeof(kTest2) - 2);
126 EXPECT_EQ(sizeof(kTest2) - 2, bs1.GetLength());
127 EXPECT_EQ(0, memcmp(bs1.GetData(), kTest2, sizeof(kTest2) - 2));
128}
129
Darin Petkove3e1cfa2011-08-11 13:41:17 -0700130TEST_F(ByteStringTest, HexEncode) {
131 ByteString bs(kTest2, sizeof(kTest2));
132 EXPECT_EQ(kTest2HexString, bs.HexEncode());
133}
134
Paul Stewart3ecfa2b2011-07-15 10:47:42 -0700135} // namespace shill