From f9d48407d6fee0b37c340f164071e16046c7443e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?PaveL=20Mac=C3=ADk?= Date: Tue, 22 Jan 2019 12:20:22 +0100 Subject: [PATCH] contract-tests: Update package names and workaround pact-foundation/pact-go#108 issue. --- .../fabric8auth_test}/api_status.go | 8 ++-- .../fabric8auth_test}/api_token.go | 7 ++-- .../fabric8auth_test}/api_user.go | 27 ++++++-------- .../fabric8auth_test}/consumer_test.go | 5 ++- .../verify_interactions.go | 2 +- test/contracts/main.go | 21 ----------- test/contracts/pact.go | 37 +++++++++++++++++++ 7 files changed, 61 insertions(+), 46 deletions(-) rename test/contracts/{consumer/fabric8auth => consumer_test/fabric8auth_test}/api_status.go (71%) rename test/contracts/{consumer/fabric8auth => consumer_test/fabric8auth_test}/api_token.go (69%) rename test/contracts/{consumer/fabric8auth => consumer_test/fabric8auth_test}/api_user.go (80%) rename test/contracts/{consumer/fabric8auth => consumer_test/fabric8auth_test}/consumer_test.go (92%) rename test/contracts/{consumer/fabric8auth => consumer_test}/verify_interactions.go (98%) delete mode 100644 test/contracts/main.go create mode 100644 test/contracts/pact.go diff --git a/test/contracts/consumer/fabric8auth/api_status.go b/test/contracts/consumer_test/fabric8auth_test/api_status.go similarity index 71% rename from test/contracts/consumer/fabric8auth/api_status.go rename to test/contracts/consumer_test/fabric8auth_test/api_status.go index 8d2f85f674..503e788594 100644 --- a/test/contracts/consumer/fabric8auth/api_status.go +++ b/test/contracts/consumer_test/fabric8auth_test/api_status.go @@ -5,6 +5,8 @@ import ( "testing" "github.com/fabric8-services/fabric8-auth/test/contracts/model" + "github.com/fabric8-services/fabric8-wit/test/contracts" + consumer "github.com/fabric8-services/fabric8-wit/test/contracts/consumer_test" "github.com/pact-foundation/pact-go/dsl" ) @@ -30,8 +32,6 @@ func AuthAPIStatus(t *testing.T, pact *dsl.Pact) { }) // Verify - - if err := pact.Verify(SimpleGetInteraction(pact, "/api/status")); err != nil { - log.Fatalf("Error on Verify: %+v", err) - } + err := pact.Verify(consumer.SimpleGetInteraction(pact, "/api/status")) + contracts.CheckErrorAndCleanPact(t, pact, err) //workaround for https://github.com/pact-foundation/pact-go/issues/108 } diff --git a/test/contracts/consumer/fabric8auth/api_token.go b/test/contracts/consumer_test/fabric8auth_test/api_token.go similarity index 69% rename from test/contracts/consumer/fabric8auth/api_token.go rename to test/contracts/consumer_test/fabric8auth_test/api_token.go index 979818418b..d1c0248612 100644 --- a/test/contracts/consumer/fabric8auth/api_token.go +++ b/test/contracts/consumer_test/fabric8auth_test/api_token.go @@ -5,6 +5,8 @@ import ( "testing" "github.com/fabric8-services/fabric8-auth/test/contracts/model" + "github.com/fabric8-services/fabric8-wit/test/contracts" + consumer "github.com/fabric8-services/fabric8-wit/test/contracts/consumer_test" "github.com/pact-foundation/pact-go/dsl" ) @@ -29,7 +31,6 @@ func AuthAPITokenKeys(t *testing.T, pact *dsl.Pact) { }) // Verify - if err := pact.Verify(SimpleGetInteraction(pact, "/api/token/keys")); err != nil { - log.Fatalf("Error on Verify: %+v", err) - } + err := pact.Verify(consumer.SimpleGetInteraction(pact, "/api/token/keys")) + contracts.CheckErrorAndCleanPact(t, pact, err) //workaround for https://github.com/pact-foundation/pact-go/issues/108 } diff --git a/test/contracts/consumer/fabric8auth/api_user.go b/test/contracts/consumer_test/fabric8auth_test/api_user.go similarity index 80% rename from test/contracts/consumer/fabric8auth/api_user.go rename to test/contracts/consumer_test/fabric8auth_test/api_user.go index 696951c87d..6435b0898b 100644 --- a/test/contracts/consumer/fabric8auth/api_user.go +++ b/test/contracts/consumer_test/fabric8auth_test/api_user.go @@ -6,6 +6,8 @@ import ( "testing" "github.com/fabric8-services/fabric8-auth/test/contracts/model" + "github.com/fabric8-services/fabric8-wit/test/contracts" + consumer "github.com/fabric8-services/fabric8-wit/test/contracts/consumer_test" "github.com/pact-foundation/pact-go/dsl" ) @@ -37,9 +39,8 @@ func AuthAPIUserByName(t *testing.T, pact *dsl.Pact, userName string) { }) // Verify - if err := pact.Verify(SimpleGetInteraction(pact, fmt.Sprintf("/api/users?filter[username]=%s", userName))); err != nil { - log.Fatalf("Error on Verify: %+v", err) - } + err := pact.Verify(consumer.SimpleGetInteraction(pact, fmt.Sprintf("/api/users?filter[username]=%s", userName))) + contracts.CheckErrorAndCleanPact(t, pact, err) } // AuthAPIUserByID defines contract of /api/users/ endpoint @@ -67,9 +68,8 @@ func AuthAPIUserByID(t *testing.T, pact *dsl.Pact, userID string) { }) // Verify - if err := pact.Verify(SimpleGetInteraction(pact, fmt.Sprintf("/api/users/%s", userID))); err != nil { - log.Fatalf("Error on Verify: %+v", err) - } + err := pact.Verify(consumer.SimpleGetInteraction(pact, fmt.Sprintf("/api/users/%s", userID))) + contracts.CheckErrorAndCleanPact(t, pact, err) //workaround for https://github.com/pact-foundation/pact-go/issues/108 } // AuthAPIUserByToken defines contract of /api/user endpoint with valid auth token @@ -102,9 +102,8 @@ func AuthAPIUserByToken(t *testing.T, pact *dsl.Pact, userToken string) { }) // Verify - if err := pact.Verify(SimpleGetInteractionWithToken(pact, "/api/user", userToken)); err != nil { - log.Fatalf("Error on Verify: %+v", err) - } + err := pact.Verify(consumer.SimpleGetInteractionWithToken(pact, "/api/user", userToken)) + contracts.CheckErrorAndCleanPact(t, pact, err) //workaround for https://github.com/pact-foundation/pact-go/issues/108 } // AuthAPIUserInvalidToken defines contract of /api/user endpoint with invalid auth token @@ -135,9 +134,8 @@ func AuthAPIUserInvalidToken(t *testing.T, pact *dsl.Pact, invalidToken string) }) // Verify - if err := pact.Verify(SimpleGetInteractionWithToken(pact, "/api/user", invalidToken)); err != nil { - log.Fatalf("Error on Verify: %+v", err) - } + err := pact.Verify(consumer.SimpleGetInteractionWithToken(pact, "/api/user", invalidToken)) + contracts.CheckErrorAndCleanPact(t, pact, err) //workaround for https://github.com/pact-foundation/pact-go/issues/108 } // AuthAPIUserNoToken defines contract of /api/user endpoint with missing auth token @@ -164,7 +162,6 @@ func AuthAPIUserNoToken(t *testing.T, pact *dsl.Pact) { }) // Verify - if err := pact.Verify(SimpleGetInteraction(pact, "/api/user")); err != nil { - log.Fatalf("Error on Verify: %+v", err) - } + err := pact.Verify(consumer.SimpleGetInteraction(pact, "/api/user")) + contracts.CheckErrorAndCleanPact(t, pact, err) //workaround for https://github.com/pact-foundation/pact-go/issues/108 } diff --git a/test/contracts/consumer/fabric8auth/consumer_test.go b/test/contracts/consumer_test/fabric8auth_test/consumer_test.go similarity index 92% rename from test/contracts/consumer/fabric8auth/consumer_test.go rename to test/contracts/consumer_test/fabric8auth_test/consumer_test.go index 43cba4f0a1..93e7c48d77 100644 --- a/test/contracts/consumer/fabric8auth/consumer_test.go +++ b/test/contracts/consumer_test/fabric8auth_test/consumer_test.go @@ -11,8 +11,9 @@ import ( "github.com/pact-foundation/pact-go/types" ) -// TestWitAPIConsumer runs all user related tests -func TestWitAPIConsumer(t *testing.T) { +// TestFabric8AuthConsumer runs all consumer side contract tests +// for the fabric8-wit (consumer) to fabric8-auth (provider) contract. +func TestFabric8AuthConsumer(t *testing.T) { log.SetOutput(os.Stdout) var pactDir = os.Getenv("PACT_DIR") diff --git a/test/contracts/consumer/fabric8auth/verify_interactions.go b/test/contracts/consumer_test/verify_interactions.go similarity index 98% rename from test/contracts/consumer/fabric8auth/verify_interactions.go rename to test/contracts/consumer_test/verify_interactions.go index dfd35e35e0..86ad3d3eef 100644 --- a/test/contracts/consumer/fabric8auth/verify_interactions.go +++ b/test/contracts/consumer_test/verify_interactions.go @@ -1,4 +1,4 @@ -package fabric8auth +package consumer import ( "fmt" diff --git a/test/contracts/main.go b/test/contracts/main.go deleted file mode 100644 index d6571c4bfa..0000000000 --- a/test/contracts/main.go +++ /dev/null @@ -1,21 +0,0 @@ -package contracts - -import ( - "fmt" - "os" - "strings" -) - -func main() { - // nop -} - -// PactDir returns a path to the directory to store pact files (taken from PACT_DIR env variable) -func PactDir() string { - return os.Getenv("PACT_DIR") -} - -// PactFile returns a path to the generated pact file -func PactFile(pactConsumer string, pactProvider string) string { - return fmt.Sprintf("%s/%s-%s.json", PactDir(), strings.ToLower(pactConsumer), strings.ToLower(pactProvider)) -} diff --git a/test/contracts/pact.go b/test/contracts/pact.go new file mode 100644 index 0000000000..a3f86b2023 --- /dev/null +++ b/test/contracts/pact.go @@ -0,0 +1,37 @@ +package contracts + +import ( + "fmt" + "os" + "strings" + "testing" + + "github.com/pact-foundation/pact-go/dsl" + "github.com/stretchr/testify/require" +) + +// PactDir returns a path to the directory to store pact files (taken from PACT_DIR env variable) +func PactDir() string { + return os.Getenv("PACT_DIR") +} + +// PactFile returns a path to the generated pact file +func PactFile(pactConsumer string, pactProvider string) string { + return fmt.Sprintf("%s/%s-%s.json", PactDir(), strings.ToLower(pactConsumer), strings.ToLower(pactProvider)) +} + +// CheckErrorAndCleanPact is a workaround for the https://github.com/pact-foundation/pact-go/issues/108 issue +// by manually clearing the interactions from pact and the mock service. +func CheckErrorAndCleanPact(t *testing.T, pact *dsl.Pact, err1 error) { + if err1 != nil { + pact.Interactions = make([]*dsl.Interaction, 0) + mockServer := &dsl.MockService{ + BaseURL: fmt.Sprintf("http://%s:%d", pact.Host, pact.Server.Port), + Consumer: pact.Consumer, + Provider: pact.Provider, + } + err2 := mockServer.DeleteInteractions() + require.NoError(t, err2) + } + require.NoError(t, err1) +}