diff --git a/pkg/testing/parser.go b/pkg/testing/parser.go index 53aa4234..182d16e4 100644 --- a/pkg/testing/parser.go +++ b/pkg/testing/parser.go @@ -46,7 +46,19 @@ func Parse(configFile string) (testSuite *TestSuite, err error) { // ParseFromData parses data and returns the test suite func ParseFromData(data []byte) (testSuite *TestSuite, err error) { testSuite = &TestSuite{} - err = yaml.Unmarshal(data, testSuite) + if err = yaml.Unmarshal(data, testSuite); err != nil { + return + } + + names := map[string]struct{}{} + for _, item := range testSuite.Items { + if _, ok := names[item.Name]; !ok { + names[item.Name] = struct{}{} + } else { + err = fmt.Errorf("having duplicated name '%s'", item.Name) + break + } + } return } diff --git a/pkg/testing/parser_test.go b/pkg/testing/parser_test.go index 42e2dd27..48f8c14f 100644 --- a/pkg/testing/parser_test.go +++ b/pkg/testing/parser_test.go @@ -35,6 +35,14 @@ func TestParse(t *testing.T) { assert.NotNil(t, err) } +func TestDuplicatedNames(t *testing.T) { + _, err := Parse("testdata/duplicated-names.yaml") + assert.NotNil(t, err) + + _, err = ParseFromData([]byte("fake")) + assert.NotNil(t, err) +} + func TestRequestRender(t *testing.T) { tests := []struct { name string diff --git a/pkg/testing/testdata/duplicated-names.yaml b/pkg/testing/testdata/duplicated-names.yaml new file mode 100644 index 00000000..6480e132 --- /dev/null +++ b/pkg/testing/testdata/duplicated-names.yaml @@ -0,0 +1,8 @@ +name: duplicated names +items: +- name: projects + request: + api: https://foo +- name: projects + request: + api: https://foo \ No newline at end of file