56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/golang/mock/gomock"
|
|
"github.com/metrue/fx/config"
|
|
"github.com/metrue/fx/constants"
|
|
"github.com/metrue/fx/types"
|
|
|
|
gock "gopkg.in/h2non/gock.v1"
|
|
)
|
|
|
|
func TestServiceRun(t *testing.T) {
|
|
defer gock.Off()
|
|
ctrl := gomock.NewController(t)
|
|
defer ctrl.Finish()
|
|
|
|
host := config.Host{Host: "127.0.0.1"}
|
|
api, err := Create(host.Host, constants.AgentPort)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
service := types.Service{
|
|
Name: "a-mock-service",
|
|
Image: "a-mock-image-id",
|
|
}
|
|
|
|
mockContainerID := "mock-container-id"
|
|
url := "http://" + host.Host + ":" + constants.AgentPort
|
|
gock.New(url).
|
|
Post("/v0.2.1/containers").
|
|
AddMatcher(func(req *http.Request, ereq *gock.Request) (m bool, e error) {
|
|
// TODO multiple matching not supported by gock
|
|
if req.URL.String() == url+"/v0.2.1/containers/"+mockContainerID+"/start" {
|
|
return true, nil
|
|
} else if req.URL.String() == url+"/v0.2.1/containers/create?name="+service.Name {
|
|
return true, nil
|
|
}
|
|
|
|
return false, nil
|
|
}).
|
|
Reply(201).
|
|
JSON(map[string]interface{}{
|
|
"Id": mockContainerID,
|
|
"Warnings": []string{},
|
|
})
|
|
|
|
// FIXME
|
|
if err := api.Run(9999, &service); err == nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|