1 /*
2  * Copyright (C) 2023 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 extern crate hitracechain;
17 
18 use hitracechain::HiTraceFlag as HiTraceFlag;
19 
20 const HITRACE_ID_PERSIST_ARR_LEN: usize = 16;
21 
22 #[test]
hitracechain_rust_unit_test_001()23 fn hitracechain_rust_unit_test_001() {
24     let trace_id = hitracechain::begin!("hitracechain_rust_unit_test_001", HiTraceFlag::Default);
25     assert!(hitracechain::get_id().get_chain_id() == trace_id.get_chain_id());
26     assert!(hitracechain::get_id().is_valid());
27     hitracechain::end(&trace_id);
28     assert!(!hitracechain::get_id().is_valid());
29 }
30 
31 #[test]
hitracechain_rust_unit_test_002()32 fn hitracechain_rust_unit_test_002() {
33     let mut trace_id = hitracechain::begin!("hitracechain_rust_unit_test_002", HiTraceFlag::IncludeAsync);
34     assert!(trace_id.is_flag_enabled(HiTraceFlag::IncludeAsync));
35     assert!(!trace_id.is_flag_enabled(HiTraceFlag::DoNotCreateSpan));
36     trace_id.enable_flag(HiTraceFlag::DoNotCreateSpan);
37     assert!(trace_id.is_flag_enabled(HiTraceFlag::DoNotCreateSpan));
38     hitracechain::end(&trace_id);
39 }
40 
41 #[test]
hitracechain_rust_unit_test_003()42 fn hitracechain_rust_unit_test_003() {
43     let mut trace_id = hitracechain::begin!("hitracechain_rust_unit_test_003", HiTraceFlag::Default);
44     assert!(trace_id.is_valid());
45     trace_id.set_flags(HiTraceFlag::IncludeAsync | HiTraceFlag::TpInfo);
46     assert!(trace_id.get_flags() == (HiTraceFlag::IncludeAsync | HiTraceFlag::TpInfo));
47     trace_id.set_chain_id(1024u64);
48     assert!(trace_id.get_chain_id() == 1024u64);
49     trace_id.set_span_id(1025u64);
50     assert!(trace_id.get_span_id() == 1025u64);
51     trace_id.set_parent_span_id(1026u64);
52     assert!(trace_id.get_parent_span_id() == 1026u64);
53     hitracechain::end(&trace_id);
54 }
55 
56 #[test]
hitracechain_rust_unit_test_004()57 fn hitracechain_rust_unit_test_004() {
58     let mut trace_id = hitracechain::begin!("hitracechain_rust_unit_test_004", HiTraceFlag::Default);
59     assert!(trace_id.is_valid());
60     hitracechain::clear_id();
61     trace_id = hitracechain::get_id();
62     assert!(!trace_id.is_valid());
63 }
64 
65 #[test]
hitracechain_rust_unit_test_005()66 fn hitracechain_rust_unit_test_005() {
67     let trace_id = hitracechain::begin!("hitracechain_rust_unit_test_005", HiTraceFlag::Default);
68     assert!(trace_id.is_valid());
69     let trace_span_id = hitracechain::create_span();
70     assert!(trace_span_id.is_valid());
71     assert!(trace_span_id.get_parent_span_id() == trace_id.get_span_id());
72     hitracechain::end(&trace_id);
73 }
74 
75 #[test]
hitracechain_rust_unit_test_006()76 fn hitracechain_rust_unit_test_006() {
77     let trace_id = hitracechain::begin!("hitracechain_rust_unit_test_006", HiTraceFlag::Default);
78     let mut persist_dest_arr = [0u8; HITRACE_ID_PERSIST_ARR_LEN];
79     hitracechain::id_to_bytes(&trace_id, &mut persist_dest_arr);
80     let trace_id_from_arr = hitracechain::bytes_to_id(&persist_dest_arr);
81     assert!(trace_id_from_arr.get_chain_id() == trace_id.get_chain_id());
82     hitracechain::end(&trace_id);
83 }
84 
85 #[test]
hitracechain_rust_unit_test_007()86 fn hitracechain_rust_unit_test_007() {
87     let trace_id = hitracechain::begin!("hitracechain_rust_unit_test_007",
88         HiTraceFlag::IncludeAsync | HiTraceFlag::TpInfo);
89     hitracechain::tracepoint!(hitracechain::HiTraceCommunicationMode::Default,
90         hitracechain::HiTraceTracepointType::Cs,
91         &trace_id,
92         "chain id of current trace is {:#x}, span id is {:#x}, parent span id is {:#x}",
93         trace_id.get_chain_id(),
94         trace_id.get_span_id(),
95         trace_id.get_parent_span_id());
96     hitracechain::end(&trace_id);
97 }