1b0e7dd80Sopenharmony_ci/*
2b0e7dd80Sopenharmony_ci * Copyright (C) 2023 Huawei Device Co., Ltd.
3b0e7dd80Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4b0e7dd80Sopenharmony_ci * you may not use this file except in compliance with the License.
5b0e7dd80Sopenharmony_ci * You may obtain a copy of the License at
6b0e7dd80Sopenharmony_ci *
7b0e7dd80Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8b0e7dd80Sopenharmony_ci *
9b0e7dd80Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10b0e7dd80Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11b0e7dd80Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12b0e7dd80Sopenharmony_ci * See the License for the specific language governing permissions and
13b0e7dd80Sopenharmony_ci * limitations under the License.
14b0e7dd80Sopenharmony_ci */
15b0e7dd80Sopenharmony_ci
16b0e7dd80Sopenharmony_ciextern crate hitracechain;
17b0e7dd80Sopenharmony_ci
18b0e7dd80Sopenharmony_ciuse hitracechain::HiTraceFlag as HiTraceFlag;
19b0e7dd80Sopenharmony_ci
20b0e7dd80Sopenharmony_ciconst HITRACE_ID_PERSIST_ARR_LEN: usize = 16;
21b0e7dd80Sopenharmony_ci
22b0e7dd80Sopenharmony_ci#[test]
23b0e7dd80Sopenharmony_cifn hitracechain_rust_unit_test_001() {
24b0e7dd80Sopenharmony_ci    let trace_id = hitracechain::begin!("hitracechain_rust_unit_test_001", HiTraceFlag::Default);
25b0e7dd80Sopenharmony_ci    assert!(hitracechain::get_id().get_chain_id() == trace_id.get_chain_id());
26b0e7dd80Sopenharmony_ci    assert!(hitracechain::get_id().is_valid());
27b0e7dd80Sopenharmony_ci    hitracechain::end(&trace_id);
28b0e7dd80Sopenharmony_ci    assert!(!hitracechain::get_id().is_valid());
29b0e7dd80Sopenharmony_ci}
30b0e7dd80Sopenharmony_ci
31b0e7dd80Sopenharmony_ci#[test]
32b0e7dd80Sopenharmony_cifn hitracechain_rust_unit_test_002() {
33b0e7dd80Sopenharmony_ci    let mut trace_id = hitracechain::begin!("hitracechain_rust_unit_test_002", HiTraceFlag::IncludeAsync);
34b0e7dd80Sopenharmony_ci    assert!(trace_id.is_flag_enabled(HiTraceFlag::IncludeAsync));
35b0e7dd80Sopenharmony_ci    assert!(!trace_id.is_flag_enabled(HiTraceFlag::DoNotCreateSpan));
36b0e7dd80Sopenharmony_ci    trace_id.enable_flag(HiTraceFlag::DoNotCreateSpan);
37b0e7dd80Sopenharmony_ci    assert!(trace_id.is_flag_enabled(HiTraceFlag::DoNotCreateSpan));
38b0e7dd80Sopenharmony_ci    hitracechain::end(&trace_id);
39b0e7dd80Sopenharmony_ci}
40b0e7dd80Sopenharmony_ci
41b0e7dd80Sopenharmony_ci#[test]
42b0e7dd80Sopenharmony_cifn hitracechain_rust_unit_test_003() {
43b0e7dd80Sopenharmony_ci    let mut trace_id = hitracechain::begin!("hitracechain_rust_unit_test_003", HiTraceFlag::Default);
44b0e7dd80Sopenharmony_ci    assert!(trace_id.is_valid());
45b0e7dd80Sopenharmony_ci    trace_id.set_flags(HiTraceFlag::IncludeAsync | HiTraceFlag::TpInfo);
46b0e7dd80Sopenharmony_ci    assert!(trace_id.get_flags() == (HiTraceFlag::IncludeAsync | HiTraceFlag::TpInfo));
47b0e7dd80Sopenharmony_ci    trace_id.set_chain_id(1024u64);
48b0e7dd80Sopenharmony_ci    assert!(trace_id.get_chain_id() == 1024u64);
49b0e7dd80Sopenharmony_ci    trace_id.set_span_id(1025u64);
50b0e7dd80Sopenharmony_ci    assert!(trace_id.get_span_id() == 1025u64);
51b0e7dd80Sopenharmony_ci    trace_id.set_parent_span_id(1026u64);
52b0e7dd80Sopenharmony_ci    assert!(trace_id.get_parent_span_id() == 1026u64);
53b0e7dd80Sopenharmony_ci    hitracechain::end(&trace_id);
54b0e7dd80Sopenharmony_ci}
55b0e7dd80Sopenharmony_ci
56b0e7dd80Sopenharmony_ci#[test]
57b0e7dd80Sopenharmony_cifn hitracechain_rust_unit_test_004() {
58b0e7dd80Sopenharmony_ci    let mut trace_id = hitracechain::begin!("hitracechain_rust_unit_test_004", HiTraceFlag::Default);
59b0e7dd80Sopenharmony_ci    assert!(trace_id.is_valid());
60b0e7dd80Sopenharmony_ci    hitracechain::clear_id();
61b0e7dd80Sopenharmony_ci    trace_id = hitracechain::get_id();
62b0e7dd80Sopenharmony_ci    assert!(!trace_id.is_valid());
63b0e7dd80Sopenharmony_ci}
64b0e7dd80Sopenharmony_ci
65b0e7dd80Sopenharmony_ci#[test]
66b0e7dd80Sopenharmony_cifn hitracechain_rust_unit_test_005() {
67b0e7dd80Sopenharmony_ci    let trace_id = hitracechain::begin!("hitracechain_rust_unit_test_005", HiTraceFlag::Default);
68b0e7dd80Sopenharmony_ci    assert!(trace_id.is_valid());
69b0e7dd80Sopenharmony_ci    let trace_span_id = hitracechain::create_span();
70b0e7dd80Sopenharmony_ci    assert!(trace_span_id.is_valid());
71b0e7dd80Sopenharmony_ci    assert!(trace_span_id.get_parent_span_id() == trace_id.get_span_id());
72b0e7dd80Sopenharmony_ci    hitracechain::end(&trace_id);
73b0e7dd80Sopenharmony_ci}
74b0e7dd80Sopenharmony_ci
75b0e7dd80Sopenharmony_ci#[test]
76b0e7dd80Sopenharmony_cifn hitracechain_rust_unit_test_006() {
77b0e7dd80Sopenharmony_ci    let trace_id = hitracechain::begin!("hitracechain_rust_unit_test_006", HiTraceFlag::Default);
78b0e7dd80Sopenharmony_ci    let mut persist_dest_arr = [0u8; HITRACE_ID_PERSIST_ARR_LEN];
79b0e7dd80Sopenharmony_ci    hitracechain::id_to_bytes(&trace_id, &mut persist_dest_arr);
80b0e7dd80Sopenharmony_ci    let trace_id_from_arr = hitracechain::bytes_to_id(&persist_dest_arr);
81b0e7dd80Sopenharmony_ci    assert!(trace_id_from_arr.get_chain_id() == trace_id.get_chain_id());
82b0e7dd80Sopenharmony_ci    hitracechain::end(&trace_id);
83b0e7dd80Sopenharmony_ci}
84b0e7dd80Sopenharmony_ci
85b0e7dd80Sopenharmony_ci#[test]
86b0e7dd80Sopenharmony_cifn hitracechain_rust_unit_test_007() {
87b0e7dd80Sopenharmony_ci    let trace_id = hitracechain::begin!("hitracechain_rust_unit_test_007",
88b0e7dd80Sopenharmony_ci        HiTraceFlag::IncludeAsync | HiTraceFlag::TpInfo);
89b0e7dd80Sopenharmony_ci    hitracechain::tracepoint!(hitracechain::HiTraceCommunicationMode::Default,
90b0e7dd80Sopenharmony_ci        hitracechain::HiTraceTracepointType::Cs,
91b0e7dd80Sopenharmony_ci        &trace_id,
92b0e7dd80Sopenharmony_ci        "chain id of current trace is {:#x}, span id is {:#x}, parent span id is {:#x}",
93b0e7dd80Sopenharmony_ci        trace_id.get_chain_id(),
94b0e7dd80Sopenharmony_ci        trace_id.get_span_id(),
95b0e7dd80Sopenharmony_ci        trace_id.get_parent_span_id());
96b0e7dd80Sopenharmony_ci    hitracechain::end(&trace_id);
97b0e7dd80Sopenharmony_ci}