isula-build/patch/0134-add-dt-for-interface-manifest-health-status-in-daemo.patch

323 lines
10 KiB
Diff
Raw Normal View History

2022-12-20 18:44:18 +08:00
From 1f5593086dea78c3300b23877db5ebcc7e272127 Mon Sep 17 00:00:00 2001
From: daisicheng <daisicheng@huawei.com>
Date: Fri, 16 Dec 2022 17:42:56 +0800
Subject: [PATCH] add dt for interface manifest, health, status in daemon and
main in cli
---
cmd/cli/main_test.go | 26 +++++++
daemon/heath_test.go | 28 +++++++
daemon/manifest_test.go | 169 ++++++++++++++++++++++++++++++++++++++++
daemon/status_test.go | 55 +++++++++++++
4 files changed, 278 insertions(+)
create mode 100644 cmd/cli/main_test.go
create mode 100644 daemon/heath_test.go
create mode 100644 daemon/manifest_test.go
create mode 100644 daemon/status_test.go
diff --git a/cmd/cli/main_test.go b/cmd/cli/main_test.go
new file mode 100644
index 0000000..145d396
--- /dev/null
+++ b/cmd/cli/main_test.go
@@ -0,0 +1,26 @@
+// Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved.
+// isula-build licensed under the Mulan PSL v2.
+// You can use this software according to the terms and conditions of the Mulan PSL v2.
+// You may obtain a copy of Mulan PSL v2 at:
+// http://license.coscl.org.cn/MulanPSL2
+// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+// PURPOSE.
+// See the Mulan PSL v2 for more details.
+// Author: daisicheng
+// Create: 2022-12-19
+// Description: This file is used for isula-build cmd/cli testing
+
+package main
+
+import (
+ "testing"
+
+ "gotest.tools/v3/assert"
+)
+
+func TestRuncli(t *testing.T) {
+ cmd := newCliCommand()
+ err := before(cmd)
+ assert.NilError(t, err)
+}
diff --git a/daemon/heath_test.go b/daemon/heath_test.go
new file mode 100644
index 0000000..c9c6af1
--- /dev/null
+++ b/daemon/heath_test.go
@@ -0,0 +1,28 @@
+// Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved.
+// isula-build licensed under the Mulan PSL v2.
+// You can use this software according to the terms and conditions of the Mulan PSL v2.
+// You may obtain a copy of Mulan PSL v2 at:
+// http://license.coscl.org.cn/MulanPSL2
+// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+// PURPOSE.
+// See the Mulan PSL v2 for more details.
+// Author: sicheng Dai
+// Create: 2020-01-20
+// Description: This is test file for health
+
+package daemon
+
+import (
+ "context"
+ "testing"
+
+ gogotypes "github.com/gogo/protobuf/types"
+ "gotest.tools/v3/assert"
+)
+
+func TestHealthCheck(t *testing.T) {
+ backend := Backend{}
+ _, err := backend.HealthCheck(context.Background(), &gogotypes.Empty{})
+ assert.NilError(t, err)
+}
diff --git a/daemon/manifest_test.go b/daemon/manifest_test.go
new file mode 100644
index 0000000..9c54045
--- /dev/null
+++ b/daemon/manifest_test.go
@@ -0,0 +1,169 @@
+// Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved.
+// isula-build licensed under the Mulan PSL v2.
+// You can use this software according to the terms and conditions of the Mulan PSL v2.
+// You may obtain a copy of Mulan PSL v2 at:
+// http://license.coscl.org.cn/MulanPSL2
+// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+// PURPOSE.
+// See the Mulan PSL v2 for more details.
+// Author: daisicheng
+// Create: 2022-12-15
+// Description: This file tests manifest interface.
+
+package daemon
+
+import (
+ "context"
+ "fmt"
+ "testing"
+
+ "github.com/containers/storage"
+ "github.com/containers/storage/pkg/stringid"
+ "github.com/pkg/errors"
+ "golang.org/x/sync/errgroup"
+ "google.golang.org/grpc"
+ "gotest.tools/v3/assert"
+
+ constant "isula.org/isula-build"
+ pb "isula.org/isula-build/api/services"
+ "isula.org/isula-build/pkg/logger"
+)
+
+type controlManifestPushServer struct {
+ grpc.ServerStream
+}
+
+func (c *controlManifestPushServer) Context() context.Context {
+ return context.Background()
+}
+
+func (c *controlManifestPushServer) Send(response *pb.ManifestPushResponse) error {
+ if response.Result == "error" {
+ return errors.New("error happened")
+ }
+ return nil
+}
+
+func TestManifestCreate(t *testing.T) {
+ d := prepare(t)
+ defer tmpClean(d)
+
+ ctx := context.TODO()
+ req := &pb.ManifestCreateRequest{ManifestList: "openeuler",
+ Manifests: []string{"openeuler_arrch64"}}
+ _, err := d.Daemon.backend.ManifestCreate(ctx, req)
+ assert.ErrorContains(t, err, "enable experimental to use manifest feature")
+
+ d.Daemon.opts.Experimental = true
+ req = &pb.ManifestCreateRequest{ManifestList: "euleros",
+ Manifests: []string{"euleros_x86"}}
+ _, err = d.Daemon.backend.ManifestCreate(ctx, req)
+ assert.ErrorContains(t, err, "failed to get the image")
+
+}
+
+func TestManifestAnnotate(t *testing.T) {
+ d := prepare(t)
+ defer tmpClean(d)
+
+ ctx := context.TODO()
+ req := &pb.ManifestAnnotateRequest{ManifestList: "openeuler",
+ Manifest: "openeuler_arrch64"}
+ _, err := d.Daemon.backend.ManifestAnnotate(ctx, req)
+ assert.ErrorContains(t, err, "enable experimental to use manifest feature")
+
+ d.Daemon.opts.Experimental = true
+ req = &pb.ManifestAnnotateRequest{ManifestList: "euleros",
+ Manifest: "euleros_x86"}
+ _, err = d.Daemon.backend.ManifestAnnotate(ctx, req)
+ assert.ErrorContains(t, err, "not found in local store")
+
+ options := &storage.ImageOptions{}
+ _, err = d.Daemon.localStore.CreateImage(stringid.GenerateRandomID(), []string{"image"}, "", "", options)
+ if err != nil {
+ t.Fatalf("create image with error: %v", err)
+ }
+ req = &pb.ManifestAnnotateRequest{ManifestList: "image",
+ Manifest: "euleros_x86"}
+ _, err = d.Daemon.backend.ManifestAnnotate(ctx, req)
+ fmt.Println(err)
+ assert.ErrorContains(t, err, "file does not exist")
+}
+
+func TestManifestInspect(t *testing.T) {
+ d := prepare(t)
+ defer tmpClean(d)
+
+ ctx := context.TODO()
+ _, err := d.Daemon.backend.ManifestInspect(ctx, &pb.ManifestInspectRequest{ManifestList: "openeuler"})
+ assert.ErrorContains(t, err, "enable experimental to use manifest feature")
+
+ d.Daemon.opts.Experimental = true
+ _, err = d.Daemon.backend.ManifestInspect(ctx, &pb.ManifestInspectRequest{ManifestList: "euleros"})
+ assert.ErrorContains(t, err, "not found in local store")
+
+ options := &storage.ImageOptions{}
+ _, err = d.Daemon.localStore.CreateImage(stringid.GenerateRandomID(), []string{"image"}, "", "", options)
+ if err != nil {
+ t.Fatalf("create image with error: %v", err)
+ }
+ _, err = d.Daemon.backend.ManifestInspect(ctx, &pb.ManifestInspectRequest{ManifestList: "image"})
+ assert.ErrorContains(t, err, "file does not exist")
+}
+
+func TestManifestPush(t *testing.T) {
+ d := prepare(t)
+ defer tmpClean(d)
+
+ stream := &controlManifestPushServer{}
+ req := &pb.ManifestPushRequest{ManifestList: "openeuler", Dest: "127.0.0.1/no-repository"}
+ err := d.Daemon.backend.ManifestPush(req, stream)
+ assert.ErrorContains(t, err, "enable experimental to use manifest feature")
+
+ d.Daemon.opts.Experimental = true
+ req = &pb.ManifestPushRequest{ManifestList: "euleros", Dest: "127.0.0.1/no-repository"}
+ err = d.Daemon.backend.ManifestPush(req, stream)
+ assert.ErrorContains(t, err, "not found in local store")
+
+ options := &storage.ImageOptions{}
+ _, err = d.Daemon.localStore.CreateImage(stringid.GenerateRandomID(), []string{"image"}, "", "", options)
+ if err != nil {
+ t.Fatalf("create image with error: %v", err)
+ }
+ req = &pb.ManifestPushRequest{ManifestList: "image", Dest: "127.0.0.1/no-repository"}
+ err = d.Daemon.backend.ManifestPush(req, stream)
+ assert.ErrorContains(t, err, "file does not exist")
+}
+
+func TestManifestPushHandler(t *testing.T) {
+ ctx := context.TODO()
+ eg, _ := errgroup.WithContext(ctx)
+
+ eg.Go(manifestPushHandlerPrint("Push Response"))
+ eg.Go(manifestPushHandlerPrint(""))
+ eg.Go(manifestPushHandlerPrint("error"))
+
+ eg.Wait()
+}
+
+func manifestPushHandlerPrint(message string) func() error {
+ return func() error {
+ stream := &controlManifestPushServer{}
+ cliLogger := logger.NewCliLogger(constant.CliLogBufferLen)
+
+ ctx := context.TODO()
+ eg, _ := errgroup.WithContext(ctx)
+
+ eg.Go(manifestPushMessageHandler(stream, cliLogger))
+ eg.Go(func() error {
+ cliLogger.Print(message)
+ cliLogger.CloseContent()
+ return nil
+ })
+
+ eg.Wait()
+
+ return nil
+ }
+}
diff --git a/daemon/status_test.go b/daemon/status_test.go
new file mode 100644
index 0000000..f235959
--- /dev/null
+++ b/daemon/status_test.go
@@ -0,0 +1,55 @@
+// Copyright (c) Huawei Technologies Co., Ltd. 2020. All rights reserved.
+// isula-build licensed under the Mulan PSL v2.
+// You can use this software according to the terms and conditions of the Mulan PSL v2.
+// You may obtain a copy of Mulan PSL v2 at:
+// http://license.coscl.org.cn/MulanPSL2
+// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
+// PURPOSE.
+// See the Mulan PSL v2 for more details.
+// Author: daisicheng
+// Create: 2022-12-09
+// Description: This file tests status interface.
+
+package daemon
+
+import (
+ "context"
+ "testing"
+
+ "github.com/pkg/errors"
+ "google.golang.org/grpc"
+ "gotest.tools/v3/assert"
+
+ constant "isula.org/isula-build"
+ pb "isula.org/isula-build/api/services"
+ "isula.org/isula-build/util"
+)
+
+type controlStatusServer struct {
+ grpc.ServerStream
+}
+
+func (c *controlStatusServer) Send(response *pb.StatusResponse) error {
+ if response.Content == "error" {
+ return errors.New("error happened")
+ }
+ return nil
+}
+
+func (c *controlStatusServer) Context() context.Context {
+ ctx := context.Background()
+ ctx, cancel := context.WithCancel(ctx)
+ cancel()
+ return ctx
+}
+
+func TestStatus(t *testing.T) {
+ d := prepare(t)
+ defer tmpClean(d)
+
+ buildID := util.GenerateNonCryptoID()[:constant.DefaultIDLen]
+ stream := &controlStatusServer{}
+ err := d.Daemon.backend.Status(&pb.StatusRequest{BuildID: buildID}, stream)
+ assert.NilError(t, err)
+}
--
2.33.0