Impala
Impalaistheopensource,nativeanalyticdatabaseforApacheHadoop.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
debug-util-test.cc
Go to the documentation of this file.
1 // Copyright 2012 Cloudera Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include <stdlib.h>
16 #include <stdio.h>
17 #include <iostream>
18 
19 #include <gtest/gtest.h>
20 #include "util/debug-util.h"
21 
22 #include "common/names.h"
23 
24 namespace impala {
25 
26 string RecursionStack(int level) {
27  if (level == 0) return GetStackTrace();
28  return RecursionStack(level - 1);
29 }
30 
31 TEST(DebugUtil, StackDump) {
32  cout << "Stack: " << endl << GetStackTrace() << endl;
33  cout << "Stack Recursion: " << endl << RecursionStack(5) << endl;
34 }
35 
36 TEST(DebugUtil, QueryIdParsing) {
37  TUniqueId id;
38  EXPECT_FALSE(ParseId("abcd", &id));
39  EXPECT_FALSE(ParseId("abcdabcdabcdabcdabcdabcdabcdabcda", &id));
40  EXPECT_FALSE(ParseId("zbcdabcdabcdabcd:abcdabcdabcdabcd", &id));
41  EXPECT_FALSE(ParseId("~bcdabcdabcdabcd:abcdabcdabcdabcd", &id));
42  EXPECT_FALSE(ParseId("abcdabcdabcdabcd:!bcdabcdabcdabcd", &id));
43 
44  EXPECT_TRUE(ParseId("abcdabcdabcdabcd:abcdabcdabcdabcd", &id));
45  EXPECT_EQ(id.hi, 0xabcdabcdabcdabcd);
46  EXPECT_EQ(id.lo, 0xabcdabcdabcdabcd);
47 
48  EXPECT_TRUE(ParseId("abcdabcdabcdabcd:1234abcdabcd5678", &id));
49  EXPECT_EQ(id.hi, 0xabcdabcdabcdabcd);
50  EXPECT_EQ(id.lo, 0x1234abcdabcd5678);
51 
52  EXPECT_TRUE(ParseId("cdabcdabcdabcd:1234abcdabcd5678", &id));
53  EXPECT_EQ(id.hi, 0xcdabcdabcdabcd);
54  EXPECT_EQ(id.lo, 0x1234abcdabcd5678);
55 
56  EXPECT_TRUE(ParseId("cdabcdabcdabcd:abcdabcd5678", &id));
57  EXPECT_EQ(id.hi, 0xcdabcdabcdabcd);
58  EXPECT_EQ(id.lo, 0xabcdabcd5678);
59 }
60 
61 TEST(DebugUtil, PreCDH5QueryIdParsing) {
62  TUniqueId id;
63  // Pre-CDH5 CM sends query IDs as decimal ints separated by a space.
64  EXPECT_TRUE(ParseId("-6067004223159161907 -6067004223159161907", &id));
65  EXPECT_EQ(id.hi, 0xabcdabcdabcdabcd);
66  EXPECT_EQ(id.lo, 0xabcdabcdabcdabcd);
67 
68  // Check components are parsed separately
69  EXPECT_TRUE(ParseId("1:2", &id));
70  EXPECT_EQ(1, id.hi);
71  EXPECT_EQ(2, id.lo);
72 
73  // Too many components
74  EXPECT_FALSE(
75  ParseId("-6067004223159161907 -6067004223159161907 -6067004223159161907", &id));
76 
77  // Extra whitespace ok
78  EXPECT_TRUE(ParseId("-6067004223159161907 -6067004223159161907", &id));
79  EXPECT_EQ(id.hi, 0xabcdabcdabcdabcd);
80  EXPECT_EQ(id.lo, 0xabcdabcdabcdabcd);
81 
82  // Unsigned representation of 0xffffffffffffffff -- too large to parse
83  EXPECT_FALSE(ParseId("18446744073709551615 18446744073709551615", &id));
84 
85  // Hex but with a space separator
86  EXPECT_FALSE(ParseId("aaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaa", &id));
87 }
88 
89 }
90 
91 int main(int argc, char **argv) {
92  ::testing::InitGoogleTest(&argc, argv);
93  return RUN_ALL_TESTS();
94 }
string RecursionStack(int level)
int main(int argc, char **argv)
bool ParseId(const string &s, TUniqueId *id)
Definition: debug-util.cc:112
TEST(AtomicTest, Basic)
Definition: atomic-test.cc:28
string GetStackTrace()
Definition: debug-util.cc:246