Fix: add e2e apiserver test for addon (#3607)

* add e2e apiserver test for addon

Signed-off-by: 楚岳 <wangyike.wyk@alibaba-inc.com>

delete comment

Signed-off-by: 楚岳 <wangyike.wyk@alibaba-inc.com>

fix

* fix test

Signed-off-by: 楚岳 <wangyike.wyk@alibaba-inc.com>

* close the reponse body

Signed-off-by: 楚岳 <wangyike.wyk@alibaba-inc.com>

* cover list enabled addon

Signed-off-by: 楚岳 <wangyike.wyk@alibaba-inc.com>

fix e2e test

Signed-off-by: 楚岳 <wangyike.wyk@alibaba-inc.com>

fix test

Signed-off-by: 楚岳 <wangyike.wyk@alibaba-inc.com>

fix test

* fix test

Signed-off-by: 楚岳 <wangyike.wyk@alibaba-inc.com>
This commit is contained in:
wyike
2022-04-11 17:46:46 +08:00
committed by GitHub
parent 85c673a574
commit d6b96fee5a
4 changed files with 152 additions and 74 deletions
+1
View File
@@ -48,6 +48,7 @@ ADDONSERVER = $(shell pgrep vela_addon_mock_server)
e2e-apiserver-test:
pkill vela_addon_mock_server || true
go run ./e2e/addon/mock/vela_addon_mock_server.go &
sleep 15
go test -v -coverpkg=./... -coverprofile=/tmp/e2e_apiserver_test.out ./test/e2e-apiserver-test
@$(OK) tests pass
+1 -1
View File
@@ -296,7 +296,7 @@ func (s *enabledAddonWebService) GetWebService() *restful.WebService {
Filter(s.rbacUsecase.CheckPerm("addon", "list")).
Param(ws.QueryParameter("registry", "filter addons from given registry").DataType("string")).
Param(ws.QueryParameter("query", "Fuzzy search based on name and description.").DataType("string")).
Returns(200, "OK", apis.ListAddonResponse{}).
Returns(200, "OK", apis.ListEnabledAddonResponse{}).
Returns(400, "Bad Request", bcode.Bcode{}).
Writes(apis.ListAddonResponse{}))
+150 -72
View File
@@ -17,92 +17,170 @@ limitations under the License.
package e2e_apiserver_test
import (
"encoding/json"
"fmt"
"time"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
"github.com/pkg/errors"
"github.com/oam-dev/kubevela/pkg/addon"
apis "github.com/oam-dev/kubevela/pkg/apiserver/rest/apis/v1"
apisv1 "github.com/oam-dev/kubevela/pkg/apiserver/rest/apis/v1"
)
var _ = Describe("Test addon rest api", func() {
registryName := "test-addon-registry"
createReq := apis.CreateAddonRegistryRequest{
Name: registryName,
Oss: &addon.OSSAddonSource{
Endpoint: "https://oss-cn-hangzhou.aliyuncs.com",
Bucket: "fake-kubevela-addons",
},
}
It("should add and delete a registry, list addons from default registry", func() {
defer GinkgoRecover()
By("add registry")
createRes := post("/addon_registries", createReq)
var rmeta apis.AddonRegistry
Expect(decodeResponseBody(createRes, &rmeta)).Should(Succeed())
Expect(rmeta.Name).Should(Equal(createReq.Name))
Expect(rmeta.Git).Should(Equal(createReq.Git))
Expect(rmeta.OSS).Should(Equal(createReq.Oss))
Describe("addon registry apiServer test", func() {
It("list addon registry", func() {
resp := get("/addon_registries")
defer resp.Body.Close()
var addonRegistry apisv1.ListAddonRegistryResponse
Expect(decodeResponseBody(resp, &addonRegistry)).Should(Succeed())
Expect(len(addonRegistry.Registries)).Should(BeEquivalentTo(1))
})
deleteRes := delete("/addon_registries/" + createReq.Name)
Expect(decodeResponseBody(deleteRes, nil)).Should(Succeed())
})
It("list addons", func() {
DefaultRegistry := "KubeVela"
listRes := get("/addons/")
var lres apis.ListAddonResponse
Expect(decodeResponseBody(listRes, &lres)).Should(Succeed())
Expect(lres.Addons).ShouldNot(BeZero())
Expect(lres.Addons[0].RegistryName).To(Equal(DefaultRegistry))
By("get addon detail")
detailRes := get("/addons/terraform-alibaba")
var dres apis.DetailAddonResponse
Expect(decodeResponseBody(detailRes, &dres)).Should(Succeed())
Expect(dres.Meta).ShouldNot(BeNil())
Expect(dres.UISchema).ShouldNot(BeNil())
Expect(dres.APISchema).ShouldNot(BeNil())
Expect(dres.RegistryName).Should(Equal(DefaultRegistry))
})
PIt("should enable and disable an addon", func() {
defer GinkgoRecover()
req := apis.EnableAddonRequest{
Args: map[string]interface{}{
"example": "test-args",
},
}
testAddon := "example"
res := post("/addons/"+testAddon+"/enable", req)
var statusRes apis.AddonStatusResponse
Expect(decodeResponseBody(res, &statusRes)).Should(Succeed())
Expect(statusRes.Phase).Should(Equal(apis.AddonPhaseEnabling))
// Wait for addon enabled
period := 30 * time.Second
timeout := 2 * time.Minute
Eventually(func() error {
res = get("/addons/" + testAddon + "/status")
defer res.Body.Close()
err := json.NewDecoder(res.Body).Decode(&statusRes)
Expect(err).Should(BeNil())
if statusRes.Phase == apis.AddonPhaseEnabled {
return nil
It("add addon registry", func() {
req := apisv1.CreateAddonRegistryRequest{
Name: "test-registry",
Git: &addon.GitAddonSource{
URL: "github.com/test-path",
},
}
return errors.New("not ready")
}, timeout, period).Should(BeNil())
res := post("/addon_registries", req)
defer res.Body.Close()
var registry apisv1.AddonRegistry
Expect(decodeResponseBody(res, &registry)).Should(Succeed())
Expect(registry.Git).ShouldNot(BeNil())
Expect(registry.Git.URL).Should(BeEquivalentTo("github.com/test-path"))
res = post("/addons/"+testAddon+"/disable", req)
Expect(decodeResponseBody(res, &statusRes)).Should(Succeed())
resp := get("/addon_registries")
var addonRegistry apisv1.ListAddonRegistryResponse
Expect(decodeResponseBody(resp, &addonRegistry)).Should(Succeed())
Expect(len(addonRegistry.Registries)).Should(BeEquivalentTo(2))
})
It("update an addon registry", func() {
req := apisv1.UpdateAddonRegistryRequest{
Git: &addon.GitAddonSource{
URL: "github.com/another-path",
},
}
res := put("/addon_registries"+"/test-registry", req)
defer res.Body.Close()
var registry apisv1.AddonRegistry
Expect(decodeResponseBody(res, &registry)).Should(Succeed())
Expect(registry.Git).ShouldNot(BeNil())
Expect(registry.Git.URL).Should(BeEquivalentTo("github.com/another-path"))
resp := get("/addon_registries")
var addonRegistry apisv1.ListAddonRegistryResponse
Expect(decodeResponseBody(resp, &addonRegistry)).Should(Succeed())
Expect(len(addonRegistry.Registries)).Should(BeEquivalentTo(2))
Expect(addonRegistry.Registries[1].Git.URL).Should(BeEquivalentTo("github.com/another-path"))
})
It("delete an addon registry", func() {
res := delete("/addon_registries" + "/test-registry")
defer res.Body.Close()
var registry apisv1.AddonRegistry
Expect(decodeResponseBody(res, &registry)).Should(Succeed())
})
})
It("should delete test registry", func() {
defer GinkgoRecover()
Describe("addon apiServer test", func() {
It("list addons", func() {
res := get("/addons")
defer res.Body.Close()
var addons apisv1.ListAddonResponse
Expect(decodeResponseBody(res, &addons)).Should(Succeed())
Expect(len(addons.Addons)).ShouldNot(BeEquivalentTo(0))
})
It("get addon detail", func() {
res := get("/addons/fluxcd")
defer res.Body.Close()
var addon apisv1.DetailAddonResponse
Expect(decodeResponseBody(res, &addon)).Should(Succeed())
Expect(addon.Name).Should(BeEquivalentTo("fluxcd"))
})
It("enable addon ", func() {
req := apisv1.EnableAddonRequest{
Args: map[string]interface{}{
"testkey": "testvalue",
},
}
res := post("/addons/fluxcd/enable", req)
defer res.Body.Close()
var addon apisv1.AddonStatusResponse
Expect(decodeResponseBody(res, &addon)).Should(Succeed())
Expect(addon.Name).Should(BeEquivalentTo("fluxcd"))
Expect(len(addon.Args)).Should(BeEquivalentTo(1))
Expect(addon.Args["testkey"]).Should(BeEquivalentTo("testvalue"))
})
It("addon status", func() {
res := get("/addons/fluxcd/status")
defer res.Body.Close()
var addonStatus apisv1.AddonStatusResponse
Expect(decodeResponseBody(res, &addonStatus)).Should(Succeed())
Expect(addonStatus.Name).Should(BeEquivalentTo("fluxcd"))
Expect(len(addonStatus.Args)).Should(BeEquivalentTo(1))
Expect(addonStatus.Args["testkey"]).Should(BeEquivalentTo("testvalue"))
})
It("not enabled addon status", func() {
res := get("/addons/example/status")
defer res.Body.Close()
var addonStatus apisv1.AddonStatusResponse
Expect(decodeResponseBody(res, &addonStatus)).Should(Succeed())
Expect(addonStatus.Name).Should(BeEquivalentTo("example"))
Expect(addonStatus.Phase).Should(BeEquivalentTo("disabled"))
})
It("update addon ", func() {
req := apisv1.EnableAddonRequest{
Args: map[string]interface{}{
"testkey": "new-testvalue",
},
}
res := put("/addons/fluxcd/update", req)
defer res.Body.Close()
var addonStatus apisv1.AddonStatusResponse
Expect(decodeResponseBody(res, &addonStatus)).Should(Succeed())
Expect(addonStatus.Name).Should(BeEquivalentTo("fluxcd"))
Expect(len(addonStatus.Args)).Should(BeEquivalentTo(1))
Expect(addonStatus.Args["testkey"]).Should(BeEquivalentTo("new-testvalue"))
status := get("/addons/fluxcd/status")
var newaddonStatus apisv1.AddonStatusResponse
Expect(decodeResponseBody(status, &newaddonStatus)).Should(Succeed())
Expect(newaddonStatus.Name).Should(BeEquivalentTo("fluxcd"))
Expect(len(newaddonStatus.Args)).Should(BeEquivalentTo(1))
Expect(newaddonStatus.Args["testkey"]).Should(BeEquivalentTo("new-testvalue"))
})
It("list enabled addon", func() {
Eventually(func() error {
res := get("/enabled_addon/")
defer res.Body.Close()
var addonList apisv1.ListEnabledAddonResponse
err := decodeResponseBody(res, &addonList)
if err != nil {
return err
}
if len(addonList.EnabledAddons) == 0 {
return fmt.Errorf("error number")
}
return nil
}, 30*time.Second, 300*time.Millisecond).Should(BeNil())
})
It("disable addon ", func() {
res := post("/addons/fluxcd/disable", nil)
defer res.Body.Close()
var addonStatus apisv1.AddonStatusResponse
Expect(decodeResponseBody(res, &addonStatus)).Should(Succeed())
Expect(addonStatus.Name).Should(BeEquivalentTo("fluxcd"))
})
})
})
-1
View File
@@ -200,7 +200,6 @@ func delete(path string) *http.Response {
req.Header.Add("Authorization", token)
response, err := client.Do(req)
Expect(err).Should(BeNil())
defer response.Body.Close()
return response
}