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 pkg_available
17ba991379Sopenharmony_ci
18ba991379Sopenharmony_ciimport (
19ba991379Sopenharmony_ci	"context"
20ba991379Sopenharmony_ci	"fotff/tester"
21ba991379Sopenharmony_ci	"github.com/sirupsen/logrus"
22ba991379Sopenharmony_ci	"math/rand"
23ba991379Sopenharmony_ci	"os"
24ba991379Sopenharmony_ci	"strings"
25ba991379Sopenharmony_ci	"sync"
26ba991379Sopenharmony_ci	"time"
27ba991379Sopenharmony_ci)
28ba991379Sopenharmony_ci
29ba991379Sopenharmony_citype Tester struct {
30ba991379Sopenharmony_ci	device2PkgDir sync.Map
31ba991379Sopenharmony_ci}
32ba991379Sopenharmony_ci
33ba991379Sopenharmony_cifunc init() {
34ba991379Sopenharmony_ci	rand.Seed(time.Now().UnixNano())
35ba991379Sopenharmony_ci}
36ba991379Sopenharmony_ci
37ba991379Sopenharmony_cifunc NewTester() tester.Tester {
38ba991379Sopenharmony_ci	ret := &Tester{}
39ba991379Sopenharmony_ci	return ret
40ba991379Sopenharmony_ci}
41ba991379Sopenharmony_ci
42ba991379Sopenharmony_cifunc (t *Tester) TaskName() string {
43ba991379Sopenharmony_ci	return "pkg_available"
44ba991379Sopenharmony_ci}
45ba991379Sopenharmony_ci
46ba991379Sopenharmony_cifunc (t *Tester) Prepare(pkgDir string, device string, ctx context.Context) error {
47ba991379Sopenharmony_ci	t.device2PkgDir.Store(device, pkgDir)
48ba991379Sopenharmony_ci	return nil
49ba991379Sopenharmony_ci}
50ba991379Sopenharmony_ci
51ba991379Sopenharmony_cifunc (t *Tester) DoTestTask(deviceSN string, ctx context.Context) (ret []tester.Result, err error) {
52ba991379Sopenharmony_ci	return t.DoTestCases(deviceSN, []string{"pkg_available"}, ctx)
53ba991379Sopenharmony_ci}
54ba991379Sopenharmony_ci
55ba991379Sopenharmony_cifunc (t *Tester) DoTestCase(deviceSN, testCase string, ctx context.Context) (ret tester.Result, err error) {
56ba991379Sopenharmony_ci	pkgDir, _ := t.device2PkgDir.Load(deviceSN)
57ba991379Sopenharmony_ci	es, err := os.ReadDir(pkgDir.(string))
58ba991379Sopenharmony_ci	if err != nil {
59ba991379Sopenharmony_ci		logrus.Errorf("can not read dir %s, testcase failed", pkgDir.(string))
60ba991379Sopenharmony_ci		return tester.Result{TestCaseName: testCase, Status: tester.ResultFail}, nil
61ba991379Sopenharmony_ci	}
62ba991379Sopenharmony_ci	for _, e := range es {
63ba991379Sopenharmony_ci		if strings.HasSuffix(e.Name(), ".img") {
64ba991379Sopenharmony_ci			logrus.Infof("find image in dir %s, package is avaliable, testcase pass", pkgDir.(string))
65ba991379Sopenharmony_ci			return tester.Result{TestCaseName: testCase, Status: tester.ResultPass}, nil
66ba991379Sopenharmony_ci		}
67ba991379Sopenharmony_ci	}
68ba991379Sopenharmony_ci	logrus.Infof("no images in dir %s, package is not avaliable, testcase failed", pkgDir.(string))
69ba991379Sopenharmony_ci	return tester.Result{TestCaseName: testCase, Status: tester.ResultFail}, nil
70ba991379Sopenharmony_ci}
71ba991379Sopenharmony_ci
72ba991379Sopenharmony_cifunc (t *Tester) DoTestCases(deviceSN string, testcases []string, ctx context.Context) (ret []tester.Result, err error) {
73ba991379Sopenharmony_ci	for _, testcase := range testcases {
74ba991379Sopenharmony_ci		r, err := t.DoTestCase(deviceSN, testcase, ctx)
75ba991379Sopenharmony_ci		if err != nil {
76ba991379Sopenharmony_ci			return nil, err
77ba991379Sopenharmony_ci		}
78ba991379Sopenharmony_ci		ret = append(ret, r)
79ba991379Sopenharmony_ci	}
80ba991379Sopenharmony_ci	return ret, nil
81ba991379Sopenharmony_ci}
82