• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
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 
16 #include <hwext/gtest-ext.h>
17 #include <hwext/gtest-tag.h>
18 
19 #include "span_join.h"
20 #include "trace_streamer_selector.h"
21 
22 using namespace testing::ext;
23 namespace SysTuning {
24 namespace TraceStreamer {
25 class SpanJoinTest : public ::testing::Test {
26 public:
SetUp()27     void SetUp()
28     {
29         stream_.InitFilter();
30     }
TearDown()31     void TearDown() {}
32 
33 public:
Prepare(const std::string & sql)34     void Prepare(const std::string& sql)
35     {
36         int size = static_cast<int>(sql.size());
37         sqlite3_prepare_v2(stream_.traceDataCache_->db_, sql.c_str(), size, &stmt_, nullptr);
38     }
39 
Step(const std::string & sql)40     void Step(const std::string& sql)
41     {
42         Prepare(sql);
43         sqlite3_step(stmt_);
44     }
45 
Next(const std::vector<int64_t> column)46     void Next(const std::vector<int64_t> column)
47     {
48         sqlite3_step(stmt_);
49         for (size_t i = 0; i < column.size(); ++i) {
50             sqlite3_column_int64(stmt_, static_cast<int>(i));
51         }
52     }
53     sqlite3_stmt* stmt_;
54     TraceStreamerSelector stream_ = {};
55 };
56 /**
57  * @tc.name: SpanjoinTwoTable
58  * @tc.desc: SpanjoinTwoTable with ts,dur,and partitioned cpu
59  * @tc.type: FUNC
60  */
61 HWTEST_F(SpanJoinTest, SpanjoinTwoTable, TestSize.Level1)
62 {
63     TS_LOGI("test30-1");
64     Step("CREATE TABLE FirstTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT, cpu UNSIGNED INT);");
65     Step("CREATE TABLE SecondTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT, cpu UNSIGNED INT);");
66     Step(
67         "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);");
68     Step("INSERT INTO FirstTable VALUES(100, 10, 5);");
69     Step("INSERT INTO FirstTable VALUES(110, 50, 5);");
70     Step("INSERT INTO FirstTable VALUES(120, 100, 2);");
71     Step("INSERT INTO FirstTable VALUES(160, 10, 5);");
72     Step("INSERT INTO SecondTable VALUES(100, 5, 5);");
73     Step("INSERT INTO SecondTable VALUES(105, 100, 5);");
74     Step("INSERT INTO SecondTable VALUES(110, 50, 2);");
75     Step("INSERT INTO SecondTable VALUES(160, 100, 2);");
76     Prepare("SELECT * FROM SpanjoinTable");
77     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW);
78     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 120);
79     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 40);
80     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 2);
81     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW);
82     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 160);
83     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 60);
84     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 2);
85     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW);
86     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 100);
87     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 5);
88     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 5);
89     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW);
90     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 105);
91     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 5);
92     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 5);
93     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW);
94     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 110);
95     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 50);
96     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 5);
97     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_ROW);
98     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 160);
99     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 10);
100     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 5);
101     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE);
102 }
103 /**
104  * @tc.name: SpanjoinTwoTableWithoutPartitioned
105  * @tc.desc: SpanjoinTwoTable with ts,dur,and without partitioned cpu
106  * @tc.type: FUNC
107  */
108 HWTEST_F(SpanJoinTest, SpanjoinTwoTableWithoutPartitioned, TestSize.Level2)
109 {
110     TS_LOGI("test30-2");
111     Step("CREATE TABLE FirstTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT);");
112     Step("CREATE TABLE SecondTable(ts UNSIGNED INT PRIMARY KEY, dur UNSIGNED INT);");
113     Step(
114         "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);");
115     Step("INSERT INTO FirstTable VALUES(100, 10);");
116     Step("INSERT INTO FirstTable VALUES(110, 50);");
117     Step("INSERT INTO FirstTable VALUES(120, 100);");
118     Step("INSERT INTO FirstTable VALUES(160, 10);");
119     Step("INSERT INTO SecondTable VALUES(100, 5);");
120     Step("INSERT INTO SecondTable VALUES(105, 100);");
121     Step("INSERT INTO SecondTable VALUES(110, 50);");
122     Step("INSERT INTO SecondTable VALUES(160, 100);");
123     Prepare("SELECT * FROM SpanjoinTable");
124     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE);
125     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
126     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
127     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
128     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE);
129     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
130     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
131     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
132     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE);
133     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
134     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
135     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
136     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE);
137     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
138     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
139     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
140     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE);
141     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
142     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
143     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
144     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE);
145     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
146     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
147     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
148     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_DONE);
149 }
150 /**
151  * @tc.name: SpanjoinTwoTableWithoutTs
152  * @tc.desc: SpanjoinTwoTableWithoutTs with dur, partitioned cpu and without ts
153  * @tc.type: FUNC
154  */
155 HWTEST_F(SpanJoinTest, SpanjoinTwoTableWithoutTs, TestSize.Level3)
156 {
157     TS_LOGI("test30-3");
158     Step("CREATE TABLE FirstTable(dur UNSIGNED INT, cpu UNSIGNED INT);");
159     Step("CREATE TABLE SecondTable(dur UNSIGNED INT, cpu UNSIGNED INT);");
160     Step(
161         "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);");
162     Step("INSERT INTO FirstTable VALUES(10, 5);");
163     Step("INSERT INTO FirstTable VALUES(50, 5);");
164     Step("INSERT INTO FirstTable VALUES(100, 2);");
165     Step("INSERT INTO FirstTable VALUES(10, 5);");
166     Step("INSERT INTO SecondTable VALUES(5, 5);");
167     Step("INSERT INTO SecondTable VALUES(100, 5);");
168     Step("INSERT INTO SecondTable VALUES(50, 2);");
169     Step("INSERT INTO SecondTable VALUES(100, 2);");
170     Prepare("SELECT * FROM SpanjoinTable");
171     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
172     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
173     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
174     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
175     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
176     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
177     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
178     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
179     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
180     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
181     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
182     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
183     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
184     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
185     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
186     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
187     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
188     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
189     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
190     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
191     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
192     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
193     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
194     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
195     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
196 }
197 /**
198  * @tc.name: SpanjoinTwoTableWithoutDur
199  * @tc.desc: SpanjoinTwoTableWithoutTs with ts, partitioned cpu and without dur
200  * @tc.type: FUNC
201  */
202 HWTEST_F(SpanJoinTest, SpanjoinTwoTableWithoutDur, TestSize.Level4)
203 {
204     TS_LOGI("test30-4");
205     Step("CREATE TABLE FirstTable(ts UNSIGNED INT PRIMARY KEY, cpu UNSIGNED INT);");
206     Step("CREATE TABLE SecondTable(ts UNSIGNED INT PRIMARY KEY, cpu UNSIGNED INT);");
207     Step(
208         "CREATE VIRTUAL TABLE SpanjoinTable using span_join(FirstTable partitioned cpu, SecondTable partitioned cpu);");
209     Step("INSERT INTO FirstTable VALUES(100, 5);");
210     Step("INSERT INTO FirstTable VALUES(110, 5);");
211     Step("INSERT INTO FirstTable VALUES(120, 2);");
212     Step("INSERT INTO FirstTable VALUES(160, 5);");
213     Step("INSERT INTO SecondTable VALUES(100, 5);");
214     Step("INSERT INTO SecondTable VALUES(105, 5);");
215     Step("INSERT INTO SecondTable VALUES(110, 2);");
216     Step("INSERT INTO SecondTable VALUES(160, 2);");
217     Prepare("SELECT * FROM SpanjoinTable");
218     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
219     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
220     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
221     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
222     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
223     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
224     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
225     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
226     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
227     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
228     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
229     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
230     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
231     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
232     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
233     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
234     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
235     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
236     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
237     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
238     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
239     EXPECT_EQ(sqlite3_column_int64(stmt_, 0), 0);
240     EXPECT_EQ(sqlite3_column_int64(stmt_, 1), 0);
241     EXPECT_EQ(sqlite3_column_int64(stmt_, 2), 0);
242     EXPECT_EQ(sqlite3_step(stmt_), SQLITE_MISUSE);
243 }
244 } // namespace TraceStreamer
245 } // namespace SysTuning
246