diff --git a/_example/example.go b/_example/example.go index bc3d6a7..862d565 100644 --- a/_example/example.go +++ b/_example/example.go @@ -30,6 +30,7 @@ func main() { config := tesseract.ContainerConfig{ Directory: os.Getenv("GOPATH") + "/src/github.com/it-chain/tesseract/mock", + Url: "github.com/mock", } c, err := container.Create(config) diff --git a/container.go b/container.go index 8f583b6..9bd65a0 100644 --- a/container.go +++ b/container.go @@ -27,6 +27,7 @@ type ContainerFactory interface { type ContainerConfig struct { Name string + Url string Directory string ContainerImage ContainerImage language string // ENUM 으로 대체하면 좋음 diff --git a/container/provider.go b/container/provider.go index aa21d7e..cf8718e 100644 --- a/container/provider.go +++ b/container/provider.go @@ -53,6 +53,7 @@ func Create(config tesseract.ContainerConfig) (DockerContainer, error) { res, err := docker.CreateContainer( containerImage, config.Directory, + config.Url, port, ) diff --git a/docker/docker.go b/docker/docker.go index 4289c54..e77f545 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -13,7 +13,7 @@ import ( "github.com/it-chain/tesseract" ) -func CreateContainer(containerImage tesseract.ContainerImage, dir string, port string) (container.ContainerCreateCreatedBody, error) { +func CreateContainer(containerImage tesseract.ContainerImage, srcPath string, destPath string, port string) (container.ContainerCreateCreatedBody, error) { GOPATH := os.Getenv("GOPATH") res := container.ContainerCreateCreatedBody{} @@ -45,7 +45,7 @@ func CreateContainer(containerImage tesseract.ContainerImage, dir string, port s Cmd: []string{ "go", "run", - "/icode/" + "icode.go", + "/go/src/" + destPath + "/icode.go", "-p" + port, }, Tty: true, @@ -58,8 +58,8 @@ func CreateContainer(containerImage tesseract.ContainerImage, dir string, port s CapAdd: []string{"SYS_ADMIN"}, PortBindings: portBindings, Binds: []string{ - GOPATH + "/src:/go/src", - dir + ":/icode"}, + srcPath + ":/go/src/" + destPath, + }, }, nil, "") if err != nil { diff --git a/docker/docker_test.go b/docker/docker_test.go index b90fa7e..1058e91 100644 --- a/docker/docker_test.go +++ b/docker/docker_test.go @@ -17,7 +17,8 @@ func TestCreateContainerWithCellCode(t *testing.T) { GOPATH := os.Getenv("GOPATH") res, err := docker.CreateContainer( tesseract.GetDefaultImage(), - GOPATH+"/src/github.com/it-chain/tesseract/container/mock", + GOPATH+"/src/github.com/it-chain/tesseract/mock", + "github.com/mock", "50005", ) defer func() { @@ -37,7 +38,8 @@ func TestStartContainer(t *testing.T) { GOPATH := os.Getenv("GOPATH") res, err := docker.CreateContainer( tesseract.GetDefaultImage(), - GOPATH+"/src/github.com/it-chain/tesseract/container/mock", + GOPATH+"/src/github.com/it-chain/tesseract/mock", + "github.com/mock", "50005", ) diff --git a/mock/handler/handler.go b/mock/handler/handler.go index 7d32004..77591c5 100644 --- a/mock/handler/handler.go +++ b/mock/handler/handler.go @@ -41,7 +41,7 @@ func (*HandlerExample) Versions() []string { return vers } -func (*HandlerExample) Handle(request *pb.Request, cell *sdk.Cell) (*pb.Response, error) { +func (*HandlerExample) Handle(request *pb.Request, cell *sdk.Cell) *pb.Response { switch request.Type { case "invoke": return handleInvoke(request, cell) @@ -51,99 +51,97 @@ func (*HandlerExample) Handle(request *pb.Request, cell *sdk.Cell) (*pb.Response fmt.Println("req : " + request.Uuid) if request.Uuid == "0" { cell.PutData("test", []byte("0")) - return responseSuccess(request, []byte(string(0))), nil + return responseSuccess(request, []byte(string(0))) } data, err := cell.GetData("test") if err != nil { - return responseError(request, err), err + return responseError(request, err) } if len(data) == 0 { err := errors.New("no data err") - return responseError(request, err), err + return responseError(request, err) } strData := string(data) intData, err := strconv.Atoi(strData) if err != nil { - return responseError(request, err), err + return responseError(request, err) } intData = intData + 1 changeData := strconv.Itoa(intData) err = cell.PutData("test", []byte(changeData)) if err != nil { - return responseError(request, err), err + return responseError(request, err) } - return responseSuccess(request, []byte(changeData)), nil + return responseSuccess(request, []byte(changeData)) default: - logger.Fatal(nil, "unknown request type") + logger.Debug(nil, "unknown request type") err := errors.New("unknown request type") - return responseError(request, err), err + return responseError(request, err) } } -func handleQuery(request *pb.Request, cell *sdk.Cell) (*pb.Response, error) { +func handleQuery(request *pb.Request, cell *sdk.Cell) *pb.Response { switch request.FunctionName { case "getA": b, err := cell.GetData("A") if err != nil { - return responseError(request, err), err + return responseError(request, err) } - return responseSuccess(request, b), nil + return responseSuccess(request, b) default: err := errors.New("unknown query method") - return responseError(request, err), err + return responseError(request, err) } } -func handleInvoke(request *pb.Request, cell *sdk.Cell) (*pb.Response, error) { +func handleInvoke(request *pb.Request, cell *sdk.Cell) *pb.Response { switch request.FunctionName { case "initA": err := cell.PutData("A", []byte("0")) if err != nil { - return responseError(request, err), err + return responseError(request, err) } - return responseSuccess(request, nil), nil + return responseSuccess(request, nil) case "incA": data, err := cell.GetData("A") if err != nil { - return responseError(request, err), err + return responseError(request, err) } if len(data) == 0 { err := errors.New("no data err") - return responseError(request, err), err + return responseError(request, err) } strData := string(data) intData, err := strconv.Atoi(strData) if err != nil { - return responseError(request, err), err + return responseError(request, err) } intData++ changeData := strconv.Itoa(intData) err = cell.PutData("A", []byte(changeData)) if err != nil { - return responseError(request, err), err + return responseError(request, err) } - return responseSuccess(request, nil), nil + return responseSuccess(request, nil) default: err := errors.New("unknown invoke method") - return responseError(request, err), err + return responseError(request, err) } } func responseError(request *pb.Request, err error) *pb.Response { return &pb.Response{ - Uuid: request.Uuid, - Type: request.Type, - Result: false, - Data: nil, - Error: err.Error(), + Uuid: request.Uuid, + Type: request.Type, + Data: nil, + Error: err.Error(), } } func responseSuccess(request *pb.Request, data []byte) *pb.Response { return &pb.Response{ - Uuid: request.Uuid, - Type: request.Type, - Result: true, - Data: data, - Error: "", + Uuid: request.Uuid, + Type: request.Type, + Data: data, + Error: "", } } diff --git a/mock/icode.go b/mock/icode.go index 6107859..1ce53ef 100644 --- a/mock/icode.go +++ b/mock/icode.go @@ -1,3 +1,5 @@ +// +build ignore + /* * Copyright 2018 It-chain * @@ -23,9 +25,9 @@ import ( "strconv" "github.com/it-chain/sdk" - "github.com/it-chain/sdk/example/handler" "github.com/it-chain/sdk/logger" "github.com/jessevdk/go-flags" + "github.com/mock/handler" ) var opts struct { @@ -34,7 +36,7 @@ var opts struct { func main() { - logger.EnableFileLogger(true, "./icode.log") + logger.EnableFileLogger(true, "./log/icode.log") parser := flags.NewParser(&opts, flags.Default) _, err := parser.Parse()