From 2394cfe2a04cac308fbcf63b080ebc8ee7336bea Mon Sep 17 00:00:00 2001 From: KaushikiAnand Date: Mon, 3 Mar 2025 18:23:47 +0530 Subject: [PATCH] IND-2428 test.yml updated with unit test coverage and linting --- .github/workflows/test.yaml | 33 ++++++++++++++++++++++++++------- .golangci.yml | 9 +++++++++ codec/bench/bench_test.go | 1 - codec/bench/shared_test.go | 3 +-- codec/codec_test.go | 23 +++++++++++++++-------- codec/gen-internal.go | 12 ++++++++---- codec/helper.go | 4 ++-- codec/shared_test.go | 3 +-- 8 files changed, 62 insertions(+), 26 deletions(-) create mode 100644 .golangci.yml diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 961f817a..257f11e7 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -9,7 +9,8 @@ jobs: outputs: go-version: ${{ steps.get-go-version.outputs.go-version }} steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - name: Checkout Code + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - name: Determine Go version id: get-go-version run: | @@ -21,20 +22,38 @@ jobs: runs-on: ubuntu-latest needs: [get-go-version] steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + - name: Chekout Code + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - name: Setup Go + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: ${{ needs.get-go-version.outputs.go-version }} - - run: 'exit $(( $(gofmt -s -l . | wc -l) != 0 ))' + - name: Check formatting + run: 'exit $(( $(gofmt -s -l . | wc -l) != 0 ))' test: name: codec test runs-on: ubuntu-latest needs: [get-go-version] steps: - - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 + - name: Checkout Code + uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 + - name: Setup Go + uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe # v4.1.0 with: go-version: ${{ needs.get-go-version.outputs.go-version }} + - name: Run golangci-lint + uses: golangci/golangci-lint-action@08e2f20817b15149a52b5b3ebe7de50aff2ba8c5 - run: go test -v ./codec - - run: go test -tags codecgen.exec -v ./codec \ No newline at end of file + - run: go test -tags codecgen.exec -v ./codec + - name: Generate coverage report + run: go test -v -coverprofile=coverage.out ./... + - name: Upload coverage report + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 + with: + path: coverage.out + name: Coverage-report + - name: Display coverage report + run: go tool cover -func=coverage.out + - name: Build Go + run: go build ./... diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..ec160339 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,9 @@ +linters: + enable: + - errcheck + - gosimple + disable: + - unused + - ineffassign + - staticcheck +output_format: colored-line-number \ No newline at end of file diff --git a/codec/bench/bench_test.go b/codec/bench/bench_test.go index 35e5227f..84d81941 100644 --- a/codec/bench/bench_test.go +++ b/codec/bench/bench_test.go @@ -172,7 +172,6 @@ func doBenchCheck(name string, encfn benchEncFn, decfn benchDecFn) { } else { logT(nil, "\t%10s: len: %d bytes,\t encode: %v,\t decode: %v", name, encLen, encDur, decDur) } - return } func fnBenchmarkEncode(b *testing.B, encName string, ts interface{}, encfn benchEncFn) { diff --git a/codec/bench/shared_test.go b/codec/bench/shared_test.go index c9df812c..59e1c038 100644 --- a/codec/bench/shared_test.go +++ b/codec/bench/shared_test.go @@ -45,7 +45,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "log" "sync" "testing" @@ -132,7 +131,7 @@ var ( ) func init() { - log.SetOutput(ioutil.Discard) // don't allow things log to standard out/err + log.SetOutput(io.Discard) // don't allow things log to standard out/err testHEDs = make([]testHED, 0, 32) testHandles = append(testHandles, // testNoopH, diff --git a/codec/codec_test.go b/codec/codec_test.go index 84879214..dd849d9f 100644 --- a/codec/codec_test.go +++ b/codec/codec_test.go @@ -10,7 +10,6 @@ import ( "errors" "fmt" "io" - "io/ioutil" "math" "math/rand" "net" @@ -1291,7 +1290,9 @@ func testCodecRpcOne(t *testing.T, rr Rpc, h Handle, doRequest bool, exitSleepMs defer func() { jsonH.TermWhitespace = false }() } srv := rpc.NewServer() - srv.Register(testRpcInt) + if err := srv.Register(testRpcInt); err != nil { + t.Fatal(err) + } ln, err := net.Listen("tcp", "127.0.0.1:0") // listen on ipv4 localhost logT(t, "connFn: addr: %v, network: %v, port: %v", ln.Addr(), ln.Addr().Network(), (ln.Addr().(*net.TCPAddr)).Port) // log("listener: %v", ln.Addr()) @@ -1673,7 +1674,7 @@ func doTestRawValue(t *testing.T, name string, h Handle) { func doTestPythonGenStreams(t *testing.T, name string, h Handle) { testOnce.Do(testInitAll) logT(t, "TestPythonGenStreams-%v", name) - tmpdir, err := ioutil.TempDir("", "golang-"+name+"-test") + tmpdir, err := os.MkdirTemp("", "golang-"+name+"-test") if err != nil { logT(t, "-------- Unable to create temp directory\n") failT(t) @@ -1707,7 +1708,7 @@ func doTestPythonGenStreams(t *testing.T, name string, h Handle) { logT(t, "..............................................") logT(t, " Testing: #%d: %T, %#v\n", i, v, v) var bss []byte - bss, err = ioutil.ReadFile(filepath.Join(tmpdir, strconv.Itoa(i)+"."+name+".golden")) + bss, err = os.ReadFile(filepath.Join(tmpdir, strconv.Itoa(i)+"."+name+".golden")) if err != nil { logT(t, "-------- Error reading golden file: %d. Err: %v", i, err) failT(t) @@ -1795,7 +1796,9 @@ func doTestMsgpackRpcSpecGoClientToPythonSvc(t *testing.T) { var mArgs MsgpackSpecRpcMultiArgs = []interface{}{"A1", "B2", "C3"} checkErrT(t, cl.Call("Echo123", mArgs, &rstr)) checkEqualT(t, rstr, "1:A1 2:B2 3:C3", "rstr=") - cmd.Process.Kill() + if err := cmd.Process.Kill(); err != nil { + t.Fatal(err) + } } func doTestMsgpackRpcSpecPythonClientToGoSvc(t *testing.T) { @@ -2083,7 +2086,7 @@ func doTestLargeContainerLen(t *testing.T, h Handle) { func testRandomFillRV(v reflect.Value) { testOnce.Do(testInitAll) fneg := func() int64 { - i := rand.Intn(1) + i := rand.Intn(2) if i == 1 { return 1 } @@ -2394,7 +2397,11 @@ func doTestScalars(t *testing.T, name string, h Handle) { func doTestIntfMapping(t *testing.T, name string, h Handle) { testOnce.Do(testInitAll) rti := reflect.TypeOf((*testIntfMapI)(nil)).Elem() - defer func() { basicHandle(h).Intf2Impl(rti, nil) }() + defer func() { + if err := basicHandle(h).Intf2Impl(rti, nil); err != nil { + t.Fatal(err) + } + }() type T9 struct { I testIntfMapI @@ -2705,7 +2712,7 @@ func TestBufioDecReader(t *testing.T) { var r = strings.NewReader(s) var br = &bufioDecReader{buf: make([]byte, 0, 13)} br.r = r - b, err := ioutil.ReadAll(br.r) + b, err := io.ReadAll(br.r) if err != nil { panic(err) } diff --git a/codec/gen-internal.go b/codec/gen-internal.go index d3c51a53..8b52e229 100644 --- a/codec/gen-internal.go +++ b/codec/gen-internal.go @@ -8,7 +8,6 @@ import ( "errors" "go/format" "io" - "io/ioutil" "strings" "sync" "text/template" @@ -258,7 +257,7 @@ func genInternalGoFile(r io.Reader, w io.Writer) (err error) { t := template.New("").Funcs(genInternalTmplFuncs) - tmplstr, err := ioutil.ReadAll(r) + tmplstr, err := io.ReadAll(r) if err != nil { return } @@ -275,10 +274,15 @@ func genInternalGoFile(r io.Reader, w io.Writer) (err error) { bout, err := format.Source(out.Bytes()) if err != nil { - w.Write(out.Bytes()) // write out if error, so we can still see. + if _, err := w.Write(out.Bytes()); err != nil { + return err + } + // write out if error, so we can still see. // w.Write(bout) // write out if error, as much as possible, so we can still see. return } - w.Write(bout) + if _, err := w.Write(bout); err != nil { + return err + } return } diff --git a/codec/helper.go b/codec/helper.go index 9c0ed16a..954ec8eb 100644 --- a/codec/helper.go +++ b/codec/helper.go @@ -741,7 +741,7 @@ func (x *BasicHandle) fn(rt reflect.Type, checkFastpath, checkCodecSelfer bool) xfnf2 := fastpathAV[idx].decfn fn.fd = func(d *Decoder, xf *codecFnInfo, xrv reflect.Value) { if xrv.Kind() == reflect.Ptr { - xfnf2(d, xf, xrv.Convert(reflect.PtrTo(xrt))) + xfnf2(d, xf, xrv.Convert(reflect.PointerTo(xrt))) } else { xfnf2(d, xf, xrv.Convert(xrt)) } @@ -1917,7 +1917,7 @@ func rgetResolveSFI(rt reflect.Type, x []structFieldInfo, pv *typeInfoLoadArray) } func implIntf(rt, iTyp reflect.Type) (base bool, indir bool) { - return rt.Implements(iTyp), reflect.PtrTo(rt).Implements(iTyp) + return rt.Implements(iTyp), reflect.PointerTo(rt).Implements(iTyp) } // isEmptyStruct is only called from isEmptyValue, and checks if a struct is empty: diff --git a/codec/shared_test.go b/codec/shared_test.go index 0a453a6e..cd574293 100644 --- a/codec/shared_test.go +++ b/codec/shared_test.go @@ -45,7 +45,6 @@ import ( "flag" "fmt" "io" - "io/ioutil" "log" "sync" "testing" @@ -132,7 +131,7 @@ var ( ) func init() { - log.SetOutput(ioutil.Discard) // don't allow things log to standard out/err + log.SetOutput(io.Discard) // don't allow things log to standard out/err testHEDs = make([]testHED, 0, 32) testHandles = append(testHandles, // testNoopH,