ci update
* re-enact golangci linter from ci
* updated golangci config
* fixed a few linting issue (on linters I didn't want to disable)
Signed-off-by: Frederic BIDON <fredbi@yahoo.com>
Frederic BIDON
3 years ago
7 | 7 | maligned: |
8 | 8 | suggest-new: true |
9 | 9 | dupl: |
10 | threshold: 100 | |
10 | threshold: 150 | |
11 | 11 | goconst: |
12 | 12 | min-len: 2 |
13 | 13 | min-occurrences: 4 |
29 | 29 | - whitespace |
30 | 30 | - wsl |
31 | 31 | - funlen |
32 | - testpackage | |
33 | - wrapcheck | |
34 | - nlreturn | |
35 | - gomnd | |
36 | - goerr113 | |
37 | - exhaustivestruct | |
38 | - errorlint | |
39 | - nestif | |
40 | - gofumpt | |
41 | - godot | |
42 | - gci | |
43 | - dogsled |
0 | 0 | after_success: |
1 | 1 | - bash <(curl -s https://codecov.io/bash) |
2 | 2 | go: |
3 | - 1.13.x | |
4 | 3 | - 1.14.x |
4 | - 1.x | |
5 | 5 | arch: |
6 | 6 | - amd64 |
7 | 7 | - ppc64le |
211 | 211 | } |
212 | 212 | } |
213 | 213 | for path, pathItem := range s.AllPaths() { |
214 | s.analyzeOperations(path, &pathItem) | |
214 | s.analyzeOperations(path, &pathItem) //#nosec | |
215 | 215 | } |
216 | 216 | |
217 | 217 | for name, parameter := range s.spec.Parameters { |
276 | 276 | for i, param := range op.Parameters { |
277 | 277 | refPref := slashpath.Join("/paths", jsonpointer.Escape(path), "parameters", strconv.Itoa(i)) |
278 | 278 | if param.Ref.String() != "" { |
279 | s.references.addParamRef(refPref, ¶m) | |
279 | s.references.addParamRef(refPref, ¶m) //#nosec | |
280 | 280 | } |
281 | 281 | if param.Pattern != "" { |
282 | 282 | s.patterns.addParameterPattern(refPref, param.Pattern) |
334 | 334 | for i, param := range op.Parameters { |
335 | 335 | refPref := slashpath.Join(prefix, "parameters", strconv.Itoa(i)) |
336 | 336 | if param.Ref.String() != "" { |
337 | s.references.addParamRef(refPref, ¶m) | |
337 | s.references.addParamRef(refPref, ¶m) //#nosec | |
338 | 338 | } |
339 | 339 | if param.Pattern != "" { |
340 | 340 | s.patterns.addParameterPattern(refPref, param.Pattern) |
367 | 367 | for k, res := range op.Responses.StatusCodeResponses { |
368 | 368 | refPref := slashpath.Join(prefix, "responses", strconv.Itoa(k)) |
369 | 369 | if res.Ref.String() != "" { |
370 | s.references.addResponseRef(refPref, &res) | |
370 | s.references.addResponseRef(refPref, &res) //#nosec | |
371 | 371 | } |
372 | 372 | for k, v := range res.Headers { |
373 | 373 | hRefPref := slashpath.Join(refPref, "headers", k) |
664 | 664 | } |
665 | 665 | for _, pi := range s.spec.Paths.Paths { |
666 | 666 | if pi.Get != nil && pi.Get.ID == operationID { |
667 | return gatherParams(&pi, pi.Get) | |
667 | return gatherParams(&pi, pi.Get) //#nosec | |
668 | 668 | } |
669 | 669 | if pi.Head != nil && pi.Head.ID == operationID { |
670 | return gatherParams(&pi, pi.Head) | |
670 | return gatherParams(&pi, pi.Head) //#nosec | |
671 | 671 | } |
672 | 672 | if pi.Options != nil && pi.Options.ID == operationID { |
673 | return gatherParams(&pi, pi.Options) | |
673 | return gatherParams(&pi, pi.Options) //#nosec | |
674 | 674 | } |
675 | 675 | if pi.Post != nil && pi.Post.ID == operationID { |
676 | return gatherParams(&pi, pi.Post) | |
676 | return gatherParams(&pi, pi.Post) //#nosec | |
677 | 677 | } |
678 | 678 | if pi.Patch != nil && pi.Patch.ID == operationID { |
679 | return gatherParams(&pi, pi.Patch) | |
679 | return gatherParams(&pi, pi.Patch) //#nosec | |
680 | 680 | } |
681 | 681 | if pi.Put != nil && pi.Put.ID == operationID { |
682 | return gatherParams(&pi, pi.Put) | |
682 | return gatherParams(&pi, pi.Put) //#nosec | |
683 | 683 | } |
684 | 684 | if pi.Delete != nil && pi.Delete.ID == operationID { |
685 | return gatherParams(&pi, pi.Delete) | |
685 | return gatherParams(&pi, pi.Delete) //#nosec | |
686 | 686 | } |
687 | 687 | } |
688 | 688 | return nil |
290 | 290 | } |
291 | 291 | } |
292 | 292 | |
293 | // nolint: unparam | |
293 | 294 | func assertRefExists(t testing.TB, data map[string]spec.Ref, key string) bool { |
294 | 295 | if _, ok := data[key]; !ok { |
295 | 296 | return assert.Fail(t, fmt.Sprintf("expected %q to exist in the ref bag", key)) |
297 | 298 | return true |
298 | 299 | } |
299 | 300 | |
301 | // nolint: unparam | |
300 | 302 | func assertSchemaRefExists(t testing.TB, data map[string]SchemaRef, key string) bool { |
301 | 303 | if _, ok := data[key]; !ok { |
302 | 304 | return assert.Fail(t, fmt.Sprintf("expected %q to exist in schema ref bag", key)) |
339 | 341 | } |
340 | 342 | } |
341 | 343 | |
344 | // nolint: unparam | |
342 | 345 | func assertPattern(t testing.TB, data map[string]string, key, pattern string) bool { |
343 | 346 | if assert.Contains(t, data, key) { |
344 | 347 | return assert.Equal(t, pattern, data[key]) |
422 | 425 | if assert.True(pt, ok) { |
423 | 426 | pi.Parameters = pi.PathItemProps.Get.OperationProps.Parameters |
424 | 427 | s.paramsAsMap(pi.Parameters, m, func(param spec.Parameter, err error) bool { |
425 | //pt.Logf("ERROR on %+v : %v", param, err) | |
428 | // pt.Logf("ERROR on %+v : %v", param, err) | |
426 | 429 | e = append(e, err.Error()) |
427 | 430 | return true // Continue |
428 | 431 | }) |
437 | 440 | if assert.True(pt, ok) { |
438 | 441 | pi.Parameters = pi.PathItemProps.Get.OperationProps.Parameters |
439 | 442 | s.paramsAsMap(pi.Parameters, m, func(param spec.Parameter, err error) bool { |
440 | //pt.Logf("ERROR on %+v : %v", param, err) | |
443 | // pt.Logf("ERROR on %+v : %v", param, err) | |
441 | 444 | e = append(e, err.Error()) |
442 | 445 | return false // Bail out |
443 | 446 | }) |
456 | 459 | if assert.True(pt, ok) { |
457 | 460 | pi.Parameters = pi.PathItemProps.Get.OperationProps.Parameters |
458 | 461 | s.paramsAsMap(pi.Parameters, m, func(param spec.Parameter, err error) bool { |
459 | //pt.Logf("ERROR on %+v : %v", param, err) | |
462 | // pt.Logf("ERROR on %+v : %v", param, err) | |
460 | 463 | e = append(e, err.Error()) |
461 | 464 | return false // Bail out |
462 | 465 | }) |
475 | 478 | if assert.True(pt, ok) { |
476 | 479 | pi.Parameters = pi.PathItemProps.Get.OperationProps.Parameters |
477 | 480 | s.paramsAsMap(pi.Parameters, m, func(param spec.Parameter, err error) bool { |
478 | //pt.Logf("ERROR on %+v : %v", param, err) | |
481 | // pt.Logf("ERROR on %+v : %v", param, err) | |
479 | 482 | e = append(e, err.Error()) |
480 | 483 | return false // Bail out |
481 | 484 | }) |
564 | 567 | pi, ok := s.spec.Paths.Paths["/fixture"] |
565 | 568 | if ok { |
566 | 569 | pi.Parameters = pi.PathItemProps.Get.OperationProps.Parameters |
567 | //func (s *Spec) ParametersFor(operationID string) []spec.Parameter { | |
570 | // func (s *Spec) ParametersFor(operationID string) []spec.Parameter { | |
568 | 571 | s.ParametersFor("fixtureOp") |
569 | 572 | } |
570 | 573 | } |
666 | 669 | require.Empty(t, reqs2[1][0].Scopes) |
667 | 670 | require.Len(t, reqs2[2], 2) |
668 | 671 | // |
669 | //require.Equal(t, reqs2[2][0].Name, "basic") | |
672 | // require.Equal(t, reqs2[2][0].Name, "basic") | |
670 | 673 | require.Contains(t, reqs2[2], SecurityRequirement{Name: "basic", Scopes: []string{}}) |
671 | 674 | require.Empty(t, reqs2[2][0].Scopes) |
672 | //require.Equal(t, reqs2[2][1].Name, "apiKey") | |
675 | // require.Equal(t, reqs2[2][1].Name, "apiKey") | |
673 | 676 | require.Contains(t, reqs2[2], SecurityRequirement{Name: "apiKey", Scopes: []string{}}) |
674 | 677 | require.Empty(t, reqs2[2][1].Scopes) |
675 | 678 | } |
813 | 816 | |
814 | 817 | schemaRefs := an.AllDefinitions() |
815 | 818 | assert.Lenf(t, schemaRefs, 14, "Expected 14 schema definitions in this spec") |
816 | //for _, refs := range schemaRefs { | |
819 | // for _, refs := range schemaRefs { | |
817 | 820 | // t.Logf("Schema Ref: %s (%s)", refs.Name, refs.Ref.String()) |
818 | //} | |
821 | // } | |
819 | 822 | schemaRefs = an.SchemasWithAllOf() |
820 | 823 | assert.Lenf(t, schemaRefs, 1, "Expected 1 schema with AllOf definition in this spec") |
821 | 824 | |
935 | 938 | } |
936 | 939 | } |
937 | 940 | |
941 | // nolint: unparam | |
938 | 942 | func assertEnum(t testing.TB, data map[string][]interface{}, key string, enum []interface{}) bool { |
939 | 943 | if assert.Contains(t, data, key) { |
940 | 944 | return assert.Equal(t, enum, data[key]) |
49 | 49 | } |
50 | 50 | } |
51 | 51 | for k, v := range s.Responses { |
52 | FixEmptyDesc(&v) | |
52 | FixEmptyDesc(&v) //#nosec | |
53 | 53 | s.Responses[k] = v |
54 | 54 | } |
55 | 55 | } |
59 | 59 | func FixEmptyDescs(rs *spec.Responses) { |
60 | 60 | FixEmptyDesc(rs.Default) |
61 | 61 | for k, v := range rs.StatusCodeResponses { |
62 | FixEmptyDesc(&v) | |
62 | FixEmptyDesc(&v) //#nosec | |
63 | 63 | rs.StatusCodeResponses[k] = v |
64 | 64 | } |
65 | 65 | } |
1040 | 1040 | return swag.ToJSONName(bn) |
1041 | 1041 | } |
1042 | 1042 | } |
1043 | return swag.ToJSONName(strings.Replace(u.Host, ".", " ", -1)) | |
1043 | return swag.ToJSONName(strings.ReplaceAll(u.Host, ".", " ")) | |
1044 | 1044 | } |
1045 | 1045 | |
1046 | 1046 | func saveSchema(spec *swspec.Swagger, name string, schema *swspec.Schema) { |
384 | 384 | assert.NoError(t, err) |
385 | 385 | |
386 | 386 | bbb, _ := json.MarshalIndent(an.spec, "", " ") |
387 | //t.Logf("%s", string(bbb)) | |
387 | // t.Logf("%s", string(bbb)) | |
388 | 388 | assert.JSONEq(t, `{ |
389 | 389 | "swagger": "2.0", |
390 | 390 | "info": { |
909 | 909 | spec.MustCreateRef("#/definitions/getSomeWhereIdDefaultBody"), |
910 | 910 | }, |
911 | 911 | // maps: |
912 | //{"#/definitions/nestedThing/properties/record/items/2/allOf/1/additionalProperties", | |
913 | //"#/definitions/nestedThingRecordItems2AllOf1/additionalProperties", | |
914 | //spec.MustCreateRef("#/definitions/nestedThingRecordItems2AllOf1AdditionalProperties"), | |
912 | // {"#/definitions/nestedThing/properties/record/items/2/allOf/1/additionalProperties", | |
913 | // "#/definitions/nestedThingRecordItems2AllOf1/additionalProperties", | |
914 | // spec.MustCreateRef("#/definitions/nestedThingRecordItems2AllOf1AdditionalProperties"), | |
915 | 915 | // }, |
916 | 916 | |
917 | //{"#/definitions/nestedThing/properties/record/items/2/allOf/1", | |
918 | //"#/definitions/nestedThingRecordItems2/allOf/1", | |
919 | //spec.MustCreateRef("#/definitions/nestedThingRecordItems2AllOf1"), | |
920 | //}, | |
917 | // {"#/definitions/nestedThing/properties/record/items/2/allOf/1", | |
918 | // "#/definitions/nestedThingRecordItems2/allOf/1", | |
919 | // spec.MustCreateRef("#/definitions/nestedThingRecordItems2AllOf1"), | |
920 | // }, | |
921 | 921 | {"#/definitions/nestedThing/properties/record/items/2/properties/name", |
922 | 922 | "#/definitions/nestedThingRecordItems2/properties/name", |
923 | 923 | spec.MustCreateRef("#/definitions/nestedThingRecordItems2Name"), |
112 | 112 | if len(collisions) != 0 { |
113 | 113 | t.Errorf("TestMixin: Expected 0 collisions, got %v\n%v", len(collisions), collisions) |
114 | 114 | } |
115 | //bbb, _ := json.MarshalIndent(primary, "", " ") | |
116 | //t.Log(string(bbb)) | |
115 | // bbb, _ := json.MarshalIndent(primary, "", " ") | |
116 | // t.Log(string(bbb)) | |
117 | 117 | } |
118 | 118 | |
119 | 119 | func TestMixinFromNilPath(t *testing.T) { |
132 | 132 | if len(primary.Paths.Paths) != 3 { |
133 | 133 | t.Errorf("TestMixin: Expected 3 paths in merged, got %v\n", len(primary.Paths.Paths)) |
134 | 134 | } |
135 | //bbb, _ := json.MarshalIndent(primary.Paths.Paths, "", " ") | |
136 | //t.Log(string(bbb)) | |
135 | // bbb, _ := json.MarshalIndent(primary.Paths.Paths, "", " ") | |
136 | // t.Log(string(bbb)) | |
137 | 137 | } |
138 | 138 | |
139 | 139 | func TestMixinSwaggerProps(t *testing.T) { |
149 | 149 | if len(collisions) != 1 { |
150 | 150 | t.Errorf("TestMixin: Expected 1 collisions, got %v\n%v", len(collisions), collisions) |
151 | 151 | } |
152 | //bbb, _ := json.MarshalIndent(primary, "", " ") | |
153 | //t.Log(string(bbb)) | |
152 | // bbb, _ := json.MarshalIndent(primary, "", " ") | |
153 | // t.Log(string(bbb)) | |
154 | 154 | } |
328 | 328 | _, err = Schema(SchemaOpts{Schema: &def, Root: sp, BasePath: bp}) |
329 | 329 | assert.Error(t, err, "expected an error here") |
330 | 330 | |
331 | //bbb, _ := json.MarshalIndent(def, "", " ") | |
332 | //log.Printf(string(bbb)) | |
331 | // bbb, _ := json.MarshalIndent(def, "", " ") | |
332 | // log.Printf(string(bbb)) | |
333 | 333 | } |
334 | 334 | |
335 | 335 | func TestSchemaAnalysis_EdgeCases(t *testing.T) { |