xref: /test/ostest/wukong/test_flow/src/test_flow.cpp (revision a69a01cd)
1/*
2 * Copyright (c) 2022 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 "test_flow.h"
17
18#include "component_manager.h"
19#include "report.h"
20
21namespace OHOS {
22namespace WuKong {
23namespace {
24bool g_isPermissionBundle = false;
25}
26TestFlow::TestFlow(WuKongShellCommand &shellcommand)
27    : shellcommand_(shellcommand),
28      isFinished_(false),
29      semStop_(SEMPHORE_STOP_NAME, 1)
30{
31}
32
33ErrCode TestFlow::CheckVaildityCmd()
34{
35    OHOS::ErrCode result = OHOS::ERR_OK;
36
37    // get command option and arguments from child class.
38    std::string shortOpts = "";
39    auto longOpts = GetOptionArguments(shortOpts);
40    if (longOpts == nullptr) {
41        return OHOS::ERR_INVALID_VALUE;
42    }
43
44    // get shell command argumnents from shellcommand.
45    int argc_ = shellcommand_.GetArgc();
46    char **argv_ = shellcommand_.GetArgv();
47    int counter = 0;
48    while (true) {
49        int option = -1;
50        counter++;
51        option = getopt_long(argc_, argv_, shortOpts.c_str(), longOpts, nullptr);
52        // process error
53        if (optind < 0 || optind > argc_) {
54            return OHOS::ERR_INVALID_VALUE;
55        }
56        // process error
57        if (option == -1) {
58            if (counter == 1 && strcmp(argv_[optind], argv_[1]) == 0) {
59                ERROR_LOG(" you must specify an option at least.");
60                result = OHOS::ERR_INVALID_VALUE;
61            }
62            break;
63        }
64        // process error
65        if (option == '?') {
66            result = HandleUnknownOption(optopt);
67            break;
68        }
69        // process correct
70        result = HandleNormalOption(option);
71        if (result != OHOS::ERR_OK) {
72            break;
73        }
74    }
75    if (result == OHOS::ERR_OK) {
76        AppManager::GetInstance()->SetAbilityController();
77        result = EnvInit();
78        if (result != OHOS::ERR_OK) {
79            return result;
80        }
81        result = WuKongUtil::GetInstance()->GetAllAppInfo();
82    }
83    return result;
84}
85
86ErrCode TestFlow::Run()
87{
88    TRACK_LOG_STD();
89    OHOS::ErrCode result = OHOS::ERR_OK;
90    int count = 0;
91    // init report
92
93    // Open the stop semaphore, check stop.
94    bool res = semStop_.Open();
95    if (!res) {
96        ERROR_LOG("Open stop semaphore failed.");
97        return OHOS::ERR_INVALID_VALUE;
98    }
99    // if the semaphore is 1, wait it.
100    if (semStop_.GetValue() == 1) {
101        semStop_.Wait();
102    }
103
104    // run test step, check test status, and control test step.
105    while (!isFinished_) {
106        if (g_isPermissionBundle == true) {
107            result = ComponentManager::GetInstance()->PermoissionInput();
108            if (result == OHOS::ERR_OK) {
109                g_isPermissionBundle = false;
110            }
111            DEBUG_LOG_STR("PermoissionInput Result: (%d)", result);
112        } else {
113            result = RunStep();
114            if (!isFinished_) {
115                DEBUG_LOG_STR("Step: (%d) Result: (%d)", ++count, result);
116            }
117        }
118        if (semStop_.GetValue() == 1) {
119            TEST_RUN_LOG("Finished: (Stop)");
120            isFinished_ = true;
121        }
122    }
123
124    TEST_RUN_LOG("all test Finished");
125    // recover stop semaphore.
126    if (semStop_.GetValue() == 0) {
127        semStop_.Post();
128    }
129    semStop_.Close();
130
131    // save report
132    OHOS::WuKong::Report::GetInstance()->Finish();
133    TRACK_LOG_END();
134    return result;
135}
136
137void TestFlow::Stop(OHOS::ErrCode code)
138{
139    isFinished_ = true;
140}
141void TestFlow::OnStatusUpdated(ComponentStatus status)
142{
143    DEBUG_LOG_STR("Component Status: (%d)", status);
144}
145
146void TestFlow::OnScreenUpdated()
147{
148    TRACK_LOG_STD();
149    TRACK_LOG_END();
150}
151
152void TestFlow::OnPermissionScreenShown()
153{
154    TRACK_LOG_STD();
155    TRACK_LOG_END();
156    g_isPermissionBundle = true;
157}
158}  // namespace WuKong
159}  // namespace OHOS
160