Skip to content

Commit

Permalink
Add SDK server HTTP API test
Browse files Browse the repository at this point in the history
Add conformance test for Rest API SDK server port 59358.
Does not contain swagger pregenerated files. Switched Go file to other
file extension, because it is not possible to exclude one file from
GolangCI linter run.
  • Loading branch information
aLekSer committed Sep 27, 2019
1 parent 579b958 commit feb78e3
Show file tree
Hide file tree
Showing 6 changed files with 203 additions and 4 deletions.
39 changes: 39 additions & 0 deletions build/build-sdk-images/restapi/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Copyright 2019 Google LLC All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
ARG BASE_IMAGE=agones-build-sdk-base:latest
FROM $BASE_IMAGE

RUN apt-get update && \
apt-get install -y wget jq && \
apt-get clean

# install go
WORKDIR /usr/local
ENV GO_VERSION=1.12
ENV GO111MODULE=on
ENV GOPATH /go
RUN wget -q https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz && \
tar -xzf go${GO_VERSION}.linux-amd64.tar.gz && rm go${GO_VERSION}.linux-amd64.tar.gz && mkdir -p ${GOPATH}

RUN curl -sL https://deb.nodesource.com/setup_11.x | bash - && \
apt-get install -y nodejs

RUN apt-get install -y openjdk-8-jre

ENV PATH /usr/local/go/bin:/go/bin:$PATH


# code generation scripts
COPY *.sh /root/
RUN chmod +x /root/*.sh
20 changes: 20 additions & 0 deletions build/build-sdk-images/restapi/build-sdk-test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/usr/bin/env bash

# Copyright 2019 Google LLC All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


mkdir /go/src/agones.dev/agones/swagger
wget -q http://central.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.8/swagger-codegen-cli-2.4.8.jar -O /tmp/swagger-codegen-cli.jar
java -jar /tmp/swagger-codegen-cli.jar generate -i /go/src/agones.dev/agones/sdk.swagger.json -l go -o /go/src/agones.dev/agones/test/sdk/restapi/swagger
19 changes: 19 additions & 0 deletions build/build-sdk-images/restapi/clean.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash

# Copyright 2019 Google LLC All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -ex
rm -rf /go/src/agones.dev/agones/test/sdk/restapi/swagger
rm /go/src/agones.dev/agones/test/sdk/restapi/http-api-test.go
21 changes: 21 additions & 0 deletions build/build-sdk-images/restapi/sdktest.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env bash

# Copyright 2019 Google LLC All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

set -ex
GO111MODULE=on
cd /go/src/agones.dev/agones/test/sdk/restapi
cp ./http-api-test.go.nolint ./http-api-test.go
go run http-api-test.go
14 changes: 10 additions & 4 deletions build/includes/sdk.mk
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ gen-sdk-grpc: COMMAND := gen
gen-sdk-grpc: run-sdk-command

# Runs a command on all supported languages, use COMMAND variable to select which command.
run-all-sdk-command: run-sdk-command-go run-sdk-command-rust run-sdk-command-cpp run-sdk-command-node
run-all-sdk-command: run-sdk-command-go run-sdk-command-rust run-sdk-command-cpp run-sdk-command-node run-sdk-command-restapi

run-sdk-command-node:
$(MAKE) run-sdk-command COMMAND=$(COMMAND) SDK_FOLDER=node
Expand All @@ -74,6 +74,10 @@ run-sdk-command-rust:
run-sdk-command-go:
$(MAKE) run-sdk-command COMMAND=$(COMMAND) SDK_FOLDER=go

run-sdk-command-restapi:
$(MAKE) run-sdk-command COMMAND=$(COMMAND) SDK_FOLDER=restapi


# Runs a command for a specific SDK if it exists.
run-sdk-command:
cd $(sdk_build_folder); \
Expand Down Expand Up @@ -116,9 +120,9 @@ ensure-build-sdk-image:
# Run SDK conformance Sidecar server in docker in order to run
# SDK client test against it. Useful for test development
run-sdk-conformance-local: TIMEOUT ?= 30
run-sdk-conformance-local: TESTS ?= ready,allocate,setlabel,setannotation,gameserver,health,shutdown,watch
run-sdk-conformance-local: TESTS ?= ready,allocate,setlabel,setannotation,gameserver,health,shutdown,watch,reserve
run-sdk-conformance-local: ensure-agones-sdk-image
docker run -e "ADDRESS=" -p 59357:59357 \
docker run -e "ADDRESS=" -p 59357:59357 -p 59358:59358 \
-e "TEST=$(TESTS)" -e "TIMEOUT=$(TIMEOUT)" $(sidecar_tag)

# Run SDK conformance test, previously built, for a specific SDK_FOLDER
Expand All @@ -130,7 +134,7 @@ run-sdk-conformance-no-build: TESTS ?= ready,allocate,setlabel,setannotation,gam
run-sdk-conformance-no-build: ensure-agones-sdk-image
run-sdk-conformance-no-build: ensure-build-sdk-image
DOCKER_RUN_ARGS="--network=host $(DOCKER_RUN_ARGS)" COMMAND=sdktest $(MAKE) run-sdk-command & \
docker run -p 59357:59357 -e "ADDRESS=" -e "TEST=$(TESTS)" -e "TIMEOUT=$(TIMEOUT)" -e "DELAY=$(DELAY)" \
docker run -p 59357:59357 -p 59358:59358 -e "ADDRESS=" -e "TEST=$(TESTS)" -e "TIMEOUT=$(TIMEOUT)" -e "DELAY=$(DELAY)" \
--net=host $(sidecar_tag)

# Run SDK conformance test for a specific SDK_FOLDER
Expand All @@ -140,9 +144,11 @@ run-sdk-conformance-test:

# Run a conformance test for all SDKs supported
run-sdk-conformance-tests:
$(MAKE) run-sdk-conformance-test SDK_FOLDER=restapi
$(MAKE) run-sdk-conformance-test SDK_FOLDER=node
$(MAKE) run-sdk-conformance-test SDK_FOLDER=go
$(MAKE) run-sdk-conformance-test SDK_FOLDER=rust
$(MAKE) run-sdk-command COMMAND=clean SDK_FOLDER=restapi

# Clean package directories and binary files left
# after building conformance tests for all SDKs supported
Expand Down
94 changes: 94 additions & 0 deletions test/sdk/restapi/http-api-test.go.nolint
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
// Copyright 2019 Google LLC All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package main

import (
"log"
"time"

"agones.dev/agones/test/sdk/restapi/swagger"
"golang.org/x/net/context"
)

func main() {
log.Println("Client is starting")
time.Sleep(1 * time.Second)
conf := swagger.NewConfiguration()
conf.BasePath = "http://localhost:59358"
cli := swagger.NewAPIClient(conf)

ctx := context.Background()
uid := ""

// Wait for SDK server to start (5 seconds)
for c := 0 ; c < 5; c++ {
_, _, err := cli.SDKApi.Ready(ctx, swagger.SdkEmpty{})
if err == nil {
break
} else {
log.Printf("Could not send Ready: %v\n", err)
}
time.Sleep(1 * time.Second)
}

go func() {
gs, _, err := cli.SDKApi.WatchGameServer(ctx)
if err != nil {
log.Fatalf("Error in WatchGameServer: %v\n", err)
}
uid = gs.ObjectMeta.Uid
}()

_, _, err := cli.SDKApi.Health(ctx, swagger.SdkEmpty{})
if err != nil {
log.Fatalf("Could not GetGameserver: %v\n", err)
}

_, _, err = cli.SDKApi.Reserve(ctx, swagger.SdkDuration{"5"})
if err != nil {
log.Fatalf("Could not send Reserve: %v\n", err)
}

_, _, err = cli.SDKApi.Allocate(ctx, swagger.SdkEmpty{})
if err != nil {
log.Fatalf("Could not send Allocate: %v\n", err)
}

gs, _, err := cli.SDKApi.GetGameServer(ctx)
if err != nil {
log.Fatalf("Could not GetGameserver: %v\n", err)
}

creationTS := gs.ObjectMeta.CreationTimestamp

_, _, err = cli.SDKApi.SetLabel(ctx, swagger.SdkKeyValue{"creationTimestamp", creationTS})
if err != nil {
log.Fatalf("Could not SetLabel: %v\n", err)
}

time.Sleep(3 * time.Second)
uid = gs.ObjectMeta.Uid
_, _, err = cli.SDKApi.SetAnnotation(ctx, swagger.SdkKeyValue{"UID", uid})
if err != nil {
log.Fatalf("Could not SetAnnotation: %v\n", err)
}
time.Sleep(1 * time.Second)

_, _, err = cli.SDKApi.Shutdown(ctx, swagger.SdkEmpty{})
if err != nil {
log.Fatalf("Could not GetGameserver: %v\n", err)
}
log.Println("REST API test finished, all queries were performed")
}

0 comments on commit feb78e3

Please sign in to comment.