1ba991379Sopenharmony_ci/*
2ba991379Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3ba991379Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4ba991379Sopenharmony_ci * you may not use this file except in compliance with the License.
5ba991379Sopenharmony_ci * You may obtain a copy of the License at
6ba991379Sopenharmony_ci *
7ba991379Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8ba991379Sopenharmony_ci *
9ba991379Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10ba991379Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11ba991379Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12ba991379Sopenharmony_ci * See the License for the specific language governing permissions and
13ba991379Sopenharmony_ci * limitations under the License.
14ba991379Sopenharmony_ci */
15ba991379Sopenharmony_ci
16ba991379Sopenharmony_cipackage manual
17ba991379Sopenharmony_ci
18ba991379Sopenharmony_ciimport (
19ba991379Sopenharmony_ci	"context"
20ba991379Sopenharmony_ci	"fmt"
21ba991379Sopenharmony_ci	"fotff/tester"
22ba991379Sopenharmony_ci	"fotff/utils"
23ba991379Sopenharmony_ci	"github.com/sirupsen/logrus"
24ba991379Sopenharmony_ci	"math/rand"
25ba991379Sopenharmony_ci	"strings"
26ba991379Sopenharmony_ci	"sync"
27ba991379Sopenharmony_ci	"time"
28ba991379Sopenharmony_ci)
29ba991379Sopenharmony_ci
30ba991379Sopenharmony_citype Tester struct {
31ba991379Sopenharmony_ci	ResultLock sync.Mutex
32ba991379Sopenharmony_ci}
33ba991379Sopenharmony_ci
34ba991379Sopenharmony_cifunc init() {
35ba991379Sopenharmony_ci	rand.Seed(time.Now().UnixNano())
36ba991379Sopenharmony_ci}
37ba991379Sopenharmony_ci
38ba991379Sopenharmony_cifunc NewTester() tester.Tester {
39ba991379Sopenharmony_ci	ret := &Tester{}
40ba991379Sopenharmony_ci	utils.ParseFromConfigFile("manual", ret)
41ba991379Sopenharmony_ci	return ret
42ba991379Sopenharmony_ci}
43ba991379Sopenharmony_ci
44ba991379Sopenharmony_cifunc (t *Tester) TaskName() string {
45ba991379Sopenharmony_ci	return "manual_test"
46ba991379Sopenharmony_ci}
47ba991379Sopenharmony_ci
48ba991379Sopenharmony_cifunc (t *Tester) Prepare(pkgDir string, device string, ctx context.Context) error {
49ba991379Sopenharmony_ci	return nil
50ba991379Sopenharmony_ci}
51ba991379Sopenharmony_ci
52ba991379Sopenharmony_cifunc (t *Tester) DoTestTask(deviceSN string, ctx context.Context) (ret []tester.Result, err error) {
53ba991379Sopenharmony_ci	return t.DoTestCases(deviceSN, []string{"default"}, ctx)
54ba991379Sopenharmony_ci}
55ba991379Sopenharmony_ci
56ba991379Sopenharmony_cifunc (t *Tester) DoTestCase(deviceSN, testCase string, ctx context.Context) (ret tester.Result, err error) {
57ba991379Sopenharmony_ci	if deviceSN == "" {
58ba991379Sopenharmony_ci		deviceSN = "default"
59ba991379Sopenharmony_ci	}
60ba991379Sopenharmony_ci	t.ResultLock.Lock()
61ba991379Sopenharmony_ci	defer t.ResultLock.Unlock()
62ba991379Sopenharmony_ci	var answer string
63ba991379Sopenharmony_ci	for {
64ba991379Sopenharmony_ci		fmt.Printf("please do testcase %s on device %s manually and type the test result, 'pass' or 'fail':\n", testCase, deviceSN)
65ba991379Sopenharmony_ci		if _, err := fmt.Scanln(&answer); err != nil {
66ba991379Sopenharmony_ci			logrus.Errorf("failed to scan result: %v", err)
67ba991379Sopenharmony_ci			continue
68ba991379Sopenharmony_ci		}
69ba991379Sopenharmony_ci		switch strings.ToUpper(strings.TrimSpace(answer)) {
70ba991379Sopenharmony_ci		case "PASS":
71ba991379Sopenharmony_ci			return tester.Result{TestCaseName: testCase, Status: tester.ResultPass}, nil
72ba991379Sopenharmony_ci		case "FAIL":
73ba991379Sopenharmony_ci			return tester.Result{TestCaseName: testCase, Status: tester.ResultFail}, nil
74ba991379Sopenharmony_ci		default:
75ba991379Sopenharmony_ci		}
76ba991379Sopenharmony_ci	}
77ba991379Sopenharmony_ci}
78ba991379Sopenharmony_ci
79ba991379Sopenharmony_cifunc (t *Tester) DoTestCases(deviceSN string, testcases []string, ctx context.Context) (ret []tester.Result, err error) {
80ba991379Sopenharmony_ci	for _, testcase := range testcases {
81ba991379Sopenharmony_ci		r, err := t.DoTestCase(deviceSN, testcase, ctx)
82ba991379Sopenharmony_ci		if err != nil {
83ba991379Sopenharmony_ci			return nil, err
84ba991379Sopenharmony_ci		}
85ba991379Sopenharmony_ci		ret = append(ret, r)
86ba991379Sopenharmony_ci	}
87ba991379Sopenharmony_ci	return ret, nil
88ba991379Sopenharmony_ci}
89