Skip to content

Commit

Permalink
Provide integration tests via the key Ditto features - ContainerFactory
Browse files Browse the repository at this point in the history
[eclipse-kanto#70] Provide integration tests via the key Ditto features - ContainerFactory
- improve error messages
- if some test failed, the container is not removed. The TearDown method should clean up the created containers

Signed-off-by: Guzgunova Antonia <Antonia.Guzgunova@bosch.io>
  • Loading branch information
antoniyatrifonova committed Nov 8, 2022
1 parent d236c04 commit 7fd1710
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 17 deletions.
52 changes: 37 additions & 15 deletions integration/containerfactory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ const (
ctrFactoryFeatureDefinition = "com.bosch.iot.suite.edge.containers:ContainerFactory:1.2.0"
)

var ctrFeatureIDs []string

type ctrFactorySuite struct {
containerManagementSuite
ctrFeatureID string
Expand All @@ -38,14 +40,21 @@ type ctrFactorySuite struct {
func (suite *ctrFactorySuite) SetupSuite() {
suite.connect()
ctrFactoryFeature := suite.getCtrFeature(ctrFactoryFeatureID)
require.NotNil(suite.T(), ctrFactoryFeature, "ContainerFactory feature must not be nil.")
require.NotNil(suite.T(), ctrFactoryFeature, "ContainerFactory feature must not be nil")

ctrFactoryFeatureDef := ctrFactoryFeature.GetDefinition()
require.NotNil(suite.T(), ctrFactoryFeatureDef, "ContainerFactory feature definition must not bi nil.")
require.Equal(suite.T(), ctrFactoryFeatureDefinition, ctrFactoryFeatureDef[0].String(), "ContainerFactory feature definition is not equals as expected.")
require.NotNil(suite.T(), ctrFactoryFeatureDef, "ContainerFactory feature definition must not bi nil")
require.Equal(suite.T(), ctrFactoryFeatureDefinition, ctrFactoryFeatureDef[0].String(), "ContainerFactory feature definition is not equals as expected")
}

func (suite *ctrFactorySuite) TearDownSuite() {
for _, element := range ctrFeatureIDs {
if element != "" {
chEvent := suite.isDeleted()
suite.execRemoveCommand(element)
require.True(suite.T(), suite.awaitChan(chEvent), "event for deleting feature not received")
}
}
suite.disconnect()
}

Expand All @@ -62,12 +71,14 @@ func (suite *ctrFactorySuite) TestCreateOperation() {

suite.execCreateCommand("create", params)

require.True(suite.T(), suite.awaitChan(chEvent), "The created events are not received.")
require.Equal(suite.T(), statusRunning, suite.getActualCtrState(), "The container state is not expected.")
require.True(suite.T(), suite.awaitChan(chEvent), "event for creating feature not received")
ctrFeatureIDs = append(ctrFeatureIDs, suite.ctrFeatureID)
require.Equal(suite.T(), statusRunning, suite.getActualCtrState(), "container state is not expected")

chEvent = suite.isDeleted()
suite.execRemoveCommand(suite.ctrFeatureID)
require.True(suite.T(), suite.awaitChan(chEvent), "The deleted event not received.")
require.True(suite.T(), suite.awaitChan(chEvent), "event for deleting feature not received.")
ctrFeatureIDs[len(ctrFeatureIDs)-1] = ""
}

func (suite *ctrFactorySuite) TestCreateWithConfigOperation() {
Expand All @@ -80,12 +91,14 @@ func (suite *ctrFactorySuite) TestCreateWithConfigOperation() {

suite.execCreateCommand("createWithConfig", params)

require.True(suite.T(), suite.awaitChan(chEvent), "The event not received.")
require.Equal(suite.T(), statusRunning, suite.getActualCtrState(), "The container state is not expected.")
require.True(suite.T(), suite.awaitChan(chEvent), "event for creating feature not received")
ctrFeatureIDs = append(ctrFeatureIDs, suite.ctrFeatureID)
require.Equal(suite.T(), statusRunning, suite.getActualCtrState(), "container state is not expected")

chEvent = suite.isDeleted()
suite.execRemoveCommand(suite.ctrFeatureID)
require.True(suite.T(), suite.awaitChan(chEvent), "The deleted event not received.")
require.True(suite.T(), suite.awaitChan(chEvent), "event for deleting feature not received")
ctrFeatureIDs[len(ctrFeatureIDs)-1] = ""
}

func (suite *ctrFactorySuite) TestCreateWithConfigPortMapping() {
Expand All @@ -107,14 +120,20 @@ func (suite *ctrFactorySuite) TestCreateWithConfigPortMapping() {

suite.execCreateCommand("createWithConfig", params)

require.True(suite.T(), suite.awaitChan(chEvent), "The event not received.")
require.True(suite.T(), suite.awaitChan(chEvent), "event for creating feature not received")
ctrFeatureIDs = append(ctrFeatureIDs, suite.ctrFeatureID)

data, _ := suite.doRequest(http.MethodGet, requestURL, nil)
require.Equal(suite.T(), httpResponse, string(data), "The HTTP response is not expected.")
body, err := suite.doRequest(http.MethodGet, requestURL, nil)
if err != nil {
suite.T().Logf("error while getting the requested URL: %v", err)
}

require.Equal(suite.T(), httpResponse, string(body), "HTTP response is not expected")

chEvent = suite.isDeleted()
suite.execRemoveCommand(suite.ctrFeatureID)
require.True(suite.T(), suite.awaitChan(chEvent), "The deleted event not received.")
require.True(suite.T(), suite.awaitChan(chEvent), "event for deleting feature not received")
ctrFeatureIDs[len(ctrFeatureIDs)-1] = ""
}

func (suite *ctrFactorySuite) isCreated() chan bool {
Expand Down Expand Up @@ -148,6 +167,9 @@ func (suite *ctrFactorySuite) isDeleted() chan bool {

func (suite *ctrFactorySuite) getActualCtrState() string {
ctrPropertyPath := fmt.Sprintf("%s/features/%s/properties/status/state/status", suite.ctrThingURL, suite.ctrFeatureID)
data, _ := suite.doRequest(http.MethodGet, ctrPropertyPath, nil)
return strings.Trim(string(data), "\"")
body, err := suite.doRequest(http.MethodGet, ctrPropertyPath, nil)
if err != nil {
suite.T().Logf("error while getting the container feature property status: %v", err)
}
return strings.Trim(string(body), "\"")
}
9 changes: 7 additions & 2 deletions integration/request_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -234,9 +234,14 @@ func (suite *containerManagementSuite) awaitChan(ch chan bool) bool {

func (suite *containerManagementSuite) getCtrFeature(containerID string) model.Feature {
ctrThingURL := fmt.Sprintf("%s/features/%s", suite.ctrThingURL, containerID)
data, _ := suite.doRequest(http.MethodGet, ctrThingURL, nil)
body, err := suite.doRequest(http.MethodGet, ctrThingURL, nil)

if err != nil {
suite.T().Logf("error while getting the container feature: %v", err)
}

var containerFeature = &containerFeature{}
json.Unmarshal(data, &containerFeature)
json.Unmarshal(body, &containerFeature)

return client.NewFeature(containerID,
client.WithFeatureDefinition(client.NewDefinitionIDFromString(containerFeature.Definition[0])),
Expand Down

0 comments on commit 7fd1710

Please sign in to comment.