Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add integration test CI task and fix integration test #489

Merged
merged 37 commits into from
Oct 2, 2018
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
d638710
add more constraint to circle tags and branches
NicolasMahe Sep 13, 2018
35520e3
remove useless docker pull from circleci
NicolasMahe Sep 13, 2018
1c9947e
improve circleci command name
NicolasMahe Sep 13, 2018
f691d4d
Remove useless apt-get clean from dockerfile
NicolasMahe Sep 13, 2018
021cafc
fix typo
NicolasMahe Sep 13, 2018
5fa0f70
Add integration_test task
NicolasMahe Sep 21, 2018
db29f3f
Remove docker pull from CircleCI
NicolasMahe Sep 21, 2018
05eaf50
Fix task name
NicolasMahe Sep 21, 2018
13242d6
Unit tests still need docker
NicolasMahe Sep 21, 2018
2519f0d
Fix circleci
NicolasMahe Sep 21, 2018
f0b2d25
Fix some integration test
NicolasMahe Sep 21, 2018
3b5e850
Put back docker build inside the tasks
NicolasMahe Sep 21, 2018
7e7260c
Remove build docker
NicolasMahe Sep 21, 2018
08506b5
Merge branch 'fix/circleci-double-execution' into feature/ci-integrat…
NicolasMahe Sep 25, 2018
04d6596
Fix indentation
NicolasMahe Sep 25, 2018
373b146
Add new parameter event in Container.DeleteNetwork.
NicolasMahe Sep 25, 2018
08abd98
Fix integration test
NicolasMahe Sep 25, 2018
4cb4010
Remove comment from circleci
NicolasMahe Sep 25, 2018
45ff0d3
Merge commit 'dev' into feature/ci-integration-test
NicolasMahe Sep 25, 2018
36e908a
Fix integration test
NicolasMahe Sep 25, 2018
c7b5004
Move back unit test
NicolasMahe Sep 25, 2018
c8da0e2
Fix github release in CircleCI task
NicolasMahe Sep 25, 2018
27f83b5
use specific type for network event instead of string
antho1404 Sep 26, 2018
6ff1c97
add missing replacements
antho1404 Sep 26, 2018
c26e98d
rename network events to events
antho1404 Sep 26, 2018
e627dba
Execute CI Test task on master even without tag
NicolasMahe Sep 26, 2018
14eb4d6
Revert change on integration test
NicolasMahe Sep 27, 2018
9ae3322
Merge branch 'dev' into feature/ci-integration-test
NicolasMahe Sep 27, 2018
a1cff3e
Fix change of behavior of StopService introduced in commit #0366e06
NicolasMahe Sep 27, 2018
461132a
Fix TestStopNotExistingService unit test
NicolasMahe Sep 27, 2018
8b80517
Increase go test timeout to 320s
NicolasMahe Sep 27, 2018
e452858
container: fix tests
ilgooz Sep 27, 2018
9816b5e
Add verbose flag to tests
krhubert Sep 27, 2018
2811133
Use NoError instead of Equial in tests
krhubert Sep 27, 2018
cbc69c3
api: fix test TestCheckService
ilgooz Sep 27, 2018
829699e
Merge branch 'dev' into feature/ci-integration-test
NicolasMahe Oct 1, 2018
ed46533
Merge pull request #505 from mesg-foundation/fix/container-stopservice
antho1404 Oct 1, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
67 changes: 30 additions & 37 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -1,54 +1,31 @@
version: 2

onlyTagProd: &onlyTagProd
filters:
tags:
only: /^v.*/
branches:
ignore: /.*/
onlyBranchDev: &onlyBranchDev
filters:
branches:
only:
- dev
transient: &transient
filters:
tags:
only: /.*/
runOnMachine: &runOnMachine
machine:
docker_layer_caching: true
working_directory: ~/.go_workspace/src/github.com/mesg-foundation/core

runOnDocker: &runOnDocker
docker:
- image: circleci/golang:1.10
working_directory: /go/src/github.com/mesg-foundation/core

jobs:
"build_docker":
<<: *runOnMachine
steps:
- checkout
- run: docker pull mesg/core:latest
- run: docker build -t mesg/core:$CIRCLE_SHA1 --build-arg version="dev build `echo $CIRCLE_SHA1 | cut -c1-7`" .

"test":
<<: *runOnDocker
steps:
- checkout
- setup_remote_docker
- run: go get -t ./...
- run: docker swarm init
- run: docker build -t sleep docker-images/sleep/
- run: docker build -t http-server docker-images/http-server/
- run: env MESG_CORE_IMAGE=mesg/core:$CIRCLE_SHA1 go test -timeout 180s -p 1 -coverprofile=coverage.txt ./...
- run: go test -timeout 180s -p 1 -tags=integration -coverprofile=coverage.txt ./...
- run: bash <(curl -s https://codecov.io/bash)

"publish_docker_dev":
<<: *runOnMachine
steps:
- checkout
- run: docker pull mesg/core:dev
- run: docker build -t mesg/core:dev --build-arg version="dev build `echo $CIRCLE_SHA1 | cut -c1-7`" .
- run: docker login -u $DOCKER_USER -p $DOCKER_PASS
- run: docker push mesg/core:dev
Expand All @@ -57,7 +34,6 @@ jobs:
<<: *runOnMachine
steps:
- checkout
- run: docker pull mesg/core:latest
- run: docker build -t mesg/core:$CIRCLE_TAG -t mesg/core:latest --build-arg version=$CIRCLE_TAG .
- run: docker login -u $DOCKER_USER -p $DOCKER_PASS
- run: docker push mesg/core:$CIRCLE_TAG
Expand All @@ -69,7 +45,7 @@ jobs:
- checkout
- run: scripts/build-cli.sh "dev build `echo $CIRCLE_SHA1 | cut -c1-7`"
- run: go get -u github.com/tcnksm/ghr
- run: ghr -u mesg-foundation -r core -delete -prerelease -b "Warning - this is a developer release, use it only if you know what are doing. Make sure to pull the latest \`mesg/core:dev\` image. \`\`\`docker pull mesg/core:dev\`\`\`" release-dev ./bin
- run: ghr -u mesg-foundation -r core -delete -prerelease -n "Developer Release" -b "Warning - this is a developer release, use it only if you know what are doing. Make sure to pull the latest \`mesg/core:dev\` image. \`\`\`docker pull mesg/core:dev\`\`\`" release-dev ./bin

"release_cli_prod":
<<: *runOnDocker
Expand All @@ -81,27 +57,44 @@ jobs:

workflows:
version: 2
build_n_deploy:

pull_request:
jobs:
- "build_docker":
<<: *transient
- "test":
<<: *transient
requires:
- "build_docker"
filters:
tags:
ignore: /.*/
branches:
ignore:
- "dev"
- "master"

release_dev:
jobs:
- "test":
filters:
tags:
ignore: /.*/
branches:
only: dev
- "publish_docker_dev":
<<: *onlyBranchDev
requires:
- "test"
- "release_cli_dev":
<<: *onlyBranchDev
requires:
- "publish_docker_dev"

release_prod:
jobs:
- "test":
filters:
tags:
only: /^v.*/
branches:
only: master
NicolasMahe marked this conversation as resolved.
Show resolved Hide resolved
- "publish_docker_prod":
<<: *onlyTagProd
requires:
- "test"
- "release_cli_prod":
<<: *onlyTagProd
requires:
- "publish_docker_prod"
16 changes: 14 additions & 2 deletions container/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,15 @@ import (
docker "github.com/docker/docker/client"
)

// NetworkEventType is a type to define the kind of event related to the network
type NetworkEventType string

// List of Network status to listen to confirm a network deletion
const (
NetworkRemove NetworkEventType = "remove"
NetworkDestroy NetworkEventType = "destroy"
NicolasMahe marked this conversation as resolved.
Show resolved Hide resolved
)

// CreateNetwork creates a Docker Network with a namespace.
func (c *Container) CreateNetwork(namespace []string) (id string, err error) {
network, err := c.FindNetwork(namespace)
Expand All @@ -34,7 +43,10 @@ func (c *Container) CreateNetwork(namespace []string) (id string, err error) {
}

// DeleteNetwork deletes a Docker Network associated with a namespace.
func (c *Container) DeleteNetwork(namespace []string) error {
// event parameter can be "destroy" or "remove". If the network was used by a service, the event to use is "destroy". If the network has not been used, the event is "remove".
// Remove removes the reference from Docker to the network.
// Destroy removes the network from Docker active network.
func (c *Container) DeleteNetwork(namespace []string, event NetworkEventType) error {
network, err := c.FindNetwork(namespace)
if docker.IsErrNotFound(err) {
return nil
Expand All @@ -50,7 +62,7 @@ func (c *Container) DeleteNetwork(namespace []string) error {
Value: network.ID,
}, filters.KeyValuePair{
Key: "event",
Value: "destroy",
Value: string(event),
}),
})
err = c.client.NetworkRemove(ctx, network.ID)
Expand Down
12 changes: 6 additions & 6 deletions container/network_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ func TestIntegrationCreateNetwork(t *testing.T) {
c, err := New()
require.Nil(t, err)
networkID, err := c.CreateNetwork([]string{"TestCreateNetwork"})
defer c.DeleteNetwork([]string{"TestCreateNetwork"})
defer c.DeleteNetwork([]string{"TestCreateNetwork"}, NetworkRemove)
require.Nil(t, err)
require.NotEqual(t, "", networkID)
}
Expand All @@ -22,7 +22,7 @@ func TestIntegrationCreateAlreadyExistingNetwork(t *testing.T) {
require.Nil(t, err)
c.CreateNetwork([]string{"TestCreateAlreadyExistingNetwork"})
networkID, err := c.CreateNetwork([]string{"TestCreateAlreadyExistingNetwork"})
defer c.DeleteNetwork([]string{"TestCreateAlreadyExistingNetwork"})
defer c.DeleteNetwork([]string{"TestCreateAlreadyExistingNetwork"}, NetworkRemove)
require.Nil(t, err)
require.NotEqual(t, "", networkID)
}
Expand All @@ -31,22 +31,22 @@ func TestIntegrationDeleteNetwork(t *testing.T) {
c, err := New()
require.Nil(t, err)
c.CreateNetwork([]string{"TestDeleteNetwork"})
err = c.DeleteNetwork([]string{"TestDeleteNetwork"})
err = c.DeleteNetwork([]string{"TestDeleteNetwork"}, NetworkRemove)
require.Nil(t, err)
}

func TestIntegrationDeleteNotExistingNetwork(t *testing.T) {
c, err := New()
require.Nil(t, err)
err = c.DeleteNetwork([]string{"TestDeleteNotExistingNetwork"})
err = c.DeleteNetwork([]string{"TestDeleteNotExistingNetwork"}, NetworkRemove)
require.Nil(t, err)
}

func TestIntegrationFindNetwork(t *testing.T) {
c, err := New()
require.Nil(t, err)
c.CreateNetwork([]string{"TestFindNetwork"})
defer c.DeleteNetwork([]string{"TestFindNetwork"})
defer c.DeleteNetwork([]string{"TestFindNetwork"}, NetworkRemove)
network, err := c.FindNetwork([]string{"TestFindNetwork"})
require.Nil(t, err)
require.NotEqual(t, "", network.ID)
Expand All @@ -63,7 +63,7 @@ func TestIntegrationFindDeletedNetwork(t *testing.T) {
c, err := New()
require.Nil(t, err)
c.CreateNetwork([]string{"TestFindDeletedNetwork"})
c.DeleteNetwork([]string{"TestFindDeletedNetwork"})
c.DeleteNetwork([]string{"TestFindDeletedNetwork"}, NetworkRemove)
_, err = c.FindNetwork([]string{"TestFindDeletedNetwork"})
require.NotNil(t, err)
}
6 changes: 3 additions & 3 deletions container/network_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ func TestDeleteNetwork(t *testing.T) {

dt.ProvideNetworkInspect(types.NetworkResource{ID: id}, nil)

require.Nil(t, c.DeleteNetwork(namespace))
require.Nil(t, c.DeleteNetwork(namespace, NetworkRemove))

li := <-dt.LastNetworkInspect()
require.Equal(t, c.Namespace(namespace), li.Network)
Expand All @@ -106,7 +106,7 @@ func TestDeleteNotExistingNetwork(t *testing.T) {

dt.ProvideNetworkInspect(types.NetworkResource{}, dockertest.NotFoundErr{})

require.Nil(t, c.DeleteNetwork(namespace))
require.Nil(t, c.DeleteNetwork(namespace, NetworkRemove))

select {
case <-dt.LastNetworkRemove():
Expand All @@ -129,7 +129,7 @@ func TestDeleteNetworkError(t *testing.T) {

dt.ProvideNetworkInspect(types.NetworkResource{}, errNetworkDelete)

require.NotNil(t, c.DeleteNetwork(namespace))
require.NotNil(t, c.DeleteNetwork(namespace, NetworkRemove))
}

func TestFindNetwork(t *testing.T) {
Expand Down
22 changes: 11 additions & 11 deletions container/service_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,38 +54,38 @@ func TestIntegrationStopNotExistingService(t *testing.T) {
require.Nil(t, err)
namespace := []string{"TestStopNotExistingService"}
err = c.StopService(namespace)
require.Nil(t, err)
require.NotNil(t, err)
NicolasMahe marked this conversation as resolved.
Show resolved Hide resolved
}

func TestIntegrationServiceStatusNeverStarted(t *testing.T) {
func TestIntegrationStatusNeverStarted(t *testing.T) {
c, err := New()
require.Nil(t, err)
namespace := []string{"TestServiceStatusNeverStarted"}
status, err := c.ServiceStatus(namespace)
namespace := []string{"TestStatusNeverStarted"}
status, err := c.Status(namespace)
require.Nil(t, err)
require.NotEqual(t, RUNNING, status)
require.Equal(t, STOPPED, status)
}

func TestIntegrationServiceStatusRunning(t *testing.T) {
func TestIntegrationStatusRunning(t *testing.T) {
c, err := New()
require.Nil(t, err)
namespace := []string{"TestServiceStatusRunning"}
namespace := []string{"TestStatusRunning"}
startTestService(namespace)
defer c.StopService(namespace)
status, err := c.ServiceStatus(namespace)
status, err := c.Status(namespace)
require.Nil(t, err)
require.Equal(t, status, RUNNING)
require.NotEqual(t, status, STOPPED)
}

func TestIntegrationServiceStatusStopped(t *testing.T) {
func TestIntegrationStatusStopped(t *testing.T) {
c, err := New()
require.Nil(t, err)
namespace := []string{"TestServiceStatusStopped"}
namespace := []string{"TestStatusStopped"}
startTestService(namespace)
c.StopService(namespace)
status, err := c.ServiceStatus(namespace)
status, err := c.Status(namespace)
require.Nil(t, err)
require.Equal(t, status, STOPPED)
require.NotEqual(t, status, RUNNING)
Expand Down Expand Up @@ -155,7 +155,7 @@ func TestIntegrationListServices(t *testing.T) {
services, err := c.ListServices("label_name")
require.Nil(t, err)
require.Equal(t, 1, len(services))
require.Equal(t, Namespace([]string{"TestListServices"}), services[0].Spec.Name)
require.Equal(t, c.Namespace([]string{"TestListServices"}), services[0].Spec.Name)
}

func TestIntegrationServiceLogs(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion container/shared_network_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func removeSharedNetworkIfExist(c *Container) error {
}
return err
}
return c.client.NetworkRemove(context.Background(), Namespace(sharedNetworkNamespace))
return c.client.NetworkRemove(context.Background(), c.Namespace([]string{}))
}

func TestIntegrationCreateSharedNetworkIfNeeded(t *testing.T) {
Expand Down
6 changes: 2 additions & 4 deletions interface/grpc/core/deploy_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@
package core

import (
"fmt"
"testing"

"github.com/logrusorgru/aurora"
"github.com/mesg-foundation/core/api"
"github.com/stretchr/testify/require"
)
Expand All @@ -23,7 +21,7 @@ func TestIntegrationDeployService(t *testing.T) {

require.Len(t, stream.serviceID, 40)
require.Contains(t, stream.statuses, api.DeployStatus{
Message: fmt.Sprintf("%s Completed.", aurora.Green("✔")),
Type: api.DONE,
Message: "Image built with success.",
Type: api.DonePositive,
})
}
6 changes: 3 additions & 3 deletions service/start_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/stretchr/testify/require"
)

func TestStartService(t *testing.T) {
func TestStartServiceIntegration(t *testing.T) {
service, _ := FromService(&Service{
Name: "TestStartService",
Dependencies: []*Dependency{
Expand All @@ -27,7 +27,7 @@ func TestStartService(t *testing.T) {
require.Equal(t, RUNNING, status)
}

func TestStartWith2Dependencies(t *testing.T) {
func TestStartWith2DependenciesIntegration(t *testing.T) {
c := newContainer(t)
service, _ := FromService(&Service{
Name: "TestStartWith2Dependencies",
Expand Down Expand Up @@ -113,7 +113,7 @@ func TestStartDependency(t *testing.T) {
},
}, ContainerOption(c))
networkID, err := c.CreateNetwork(service.namespace())
defer c.DeleteNetwork(service.namespace())
defer c.DeleteNetwork(service.namespace(), container.NetworkDestroy)
dep := service.Dependencies[0]
serviceID, err := dep.Start(networkID)
defer dep.Stop()
Expand Down