1 : // Copyright 2014 Google Inc. All Rights Reserved.
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 "syzygy/agent/memprof/parameters.h"
16 :
17 : #include "base/environment.h"
18 : #include "gtest/gtest.h"
19 :
20 : namespace agent {
21 : namespace memprof {
22 :
23 E : TEST(ParametersTest, SetDefaults) {
24 E : Parameters p = {};
25 E : SetDefaultParameters(&p);
26 E : EXPECT_EQ(kDefaultStackTraceTracking, p.stack_trace_tracking);
27 E : EXPECT_EQ(kDefaultSerializeTimestamps, p.serialize_timestamps);
28 E : EXPECT_EQ(kDefaultHashContentsAtFree, p.hash_contents_at_free);
29 E : }
30 :
31 E : TEST(ParametersTest, ParseInvalidStackTraceTracking) {
32 E : Parameters p = {};
33 E : SetDefaultParameters(&p);
34 E : std::string str("--stack-trace-tracking=foo");
35 E : EXPECT_FALSE(ParseParameters(str, &p));
36 E : }
37 :
38 E : TEST(ParametersTest, ParseMinimalCommandLine) {
39 E : Parameters p = {};
40 E : SetDefaultParameters(&p);
41 E : std::string str("");
42 E : EXPECT_TRUE(ParseParameters(str, &p));
43 E : EXPECT_EQ(kDefaultStackTraceTracking, p.stack_trace_tracking);
44 E : EXPECT_EQ(kDefaultSerializeTimestamps, p.serialize_timestamps);
45 E : EXPECT_EQ(kDefaultHashContentsAtFree, p.hash_contents_at_free);
46 E : }
47 :
48 E : TEST(ParametersTest, ParseMaximalCommandLine) {
49 E : Parameters p = {};
50 E : SetDefaultParameters(&p);
51 : std::string str("--stack-trace-tracking=emit "
52 : "--serialize-timestamps "
53 E : "--hash-contents-at-free");
54 E : EXPECT_TRUE(ParseParameters(str, &p));
55 E : EXPECT_EQ(kTrackingEmit, p.stack_trace_tracking);
56 E : EXPECT_TRUE(p.serialize_timestamps);
57 E : EXPECT_TRUE(p.hash_contents_at_free);
58 E : }
59 :
60 E : TEST(ParametersTest, ParseNoEnvironment) {
61 E : scoped_ptr<base::Environment> env(base::Environment::Create());
62 E : ASSERT_NE(nullptr, env.get());
63 E : env->UnSetVar(kParametersEnvVar);
64 :
65 E : Parameters p = {};
66 E : SetDefaultParameters(&p);
67 E : EXPECT_TRUE(ParseParametersFromEnv(&p));
68 E : EXPECT_EQ(kDefaultStackTraceTracking, p.stack_trace_tracking);
69 E : EXPECT_EQ(kDefaultSerializeTimestamps, p.serialize_timestamps);
70 E : EXPECT_EQ(kDefaultHashContentsAtFree, p.hash_contents_at_free);
71 E : }
72 :
73 E : TEST(ParametersTest, ParseEmptyEnvironment) {
74 E : scoped_ptr<base::Environment> env(base::Environment::Create());
75 E : ASSERT_NE(nullptr, env.get());
76 E : env->SetVar(kParametersEnvVar, "");
77 :
78 E : Parameters p = {};
79 E : SetDefaultParameters(&p);
80 E : EXPECT_TRUE(ParseParametersFromEnv(&p));
81 E : EXPECT_EQ(kDefaultStackTraceTracking, p.stack_trace_tracking);
82 E : EXPECT_EQ(kDefaultSerializeTimestamps, p.serialize_timestamps);
83 E : EXPECT_EQ(kDefaultHashContentsAtFree, p.hash_contents_at_free);
84 E : }
85 :
86 E : TEST(ParametersTest, ParseInvalidEnvironment) {
87 E : scoped_ptr<base::Environment> env(base::Environment::Create());
88 E : ASSERT_NE(nullptr, env.get());
89 E : env->SetVar(kParametersEnvVar, "--stack-trace-tracking=foo");
90 :
91 E : Parameters p = {};
92 E : SetDefaultParameters(&p);
93 E : EXPECT_FALSE(ParseParametersFromEnv(&p));
94 E : }
95 :
96 E : TEST(ParametersTest, ParseValidEnvironment) {
97 E : scoped_ptr<base::Environment> env(base::Environment::Create());
98 E : ASSERT_NE(nullptr, env.get());
99 : env->SetVar(kParametersEnvVar,
100 E : "--stack-trace-tracking=emit --serialize-timestamps");
101 :
102 E : Parameters p = {};
103 E : SetDefaultParameters(&p);
104 E : EXPECT_TRUE(ParseParametersFromEnv(&p));
105 E : EXPECT_EQ(kTrackingEmit, p.stack_trace_tracking);
106 E : EXPECT_TRUE(p.serialize_timestamps);
107 E : }
108 :
109 : } // namespace memprof
110 : } // namespace agent
|