Skip to content

Commit f3e3c35

Browse files
authored
Merge branch 'master' into master
2 parents e7aae6e + 692f967 commit f3e3c35

File tree

8 files changed

+65
-2
lines changed

8 files changed

+65
-2
lines changed

Makefile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export GOBIN := $(abspath $(BUILD_DIR))
1414
export PATH := $(PATH):$(GOBIN):$(shell dirname $(GO))
1515
export CGO_LDFLAGS := -lswsscommon -lhiredis
1616
export CGO_CXXFLAGS := -I/usr/include/swss -w -Wall -fpermissive
17+
export MEMCHECK_CGO_LDFLAGS := $(CGO_LDFLAGS) -fsanitize=address
18+
export MEMCHECK_CGO_CXXFLAGS := $(CGO_CXXFLAGS) -fsanitize=leak
1719

1820
ifeq ($(ENABLE_TRANSLIB_WRITE),y)
1921
BLD_TAGS := gnmi_translib_write
@@ -26,6 +28,11 @@ ifneq ($(BLD_TAGS),)
2628
BLD_FLAGS := -tags "$(strip $(BLD_TAGS))"
2729
endif
2830

31+
MEMCHECK_TAGS := $(BLD_TAGS) gnmi_memcheck
32+
ifneq ($(MEMCHECK_TAGS),)
33+
MEMCHECK_FLAGS := -tags "$(strip $(MEMCHECK_TAGS))"
34+
endif
35+
2936
ENABLE_DIALOUT_VALUE := 1
3037
ifeq ($(ENABLE_DIALOUT),n)
3138
ENABLE_DIALOUT_VALUE = 0
@@ -133,6 +140,13 @@ endif
133140
gocov convert coverage-*.txt | gocov-xml -source $(shell pwd) > coverage.xml
134141
rm -rf coverage-*.txt
135142

143+
check_memleak: $(DBCONFG) $(ENVFILE)
144+
sudo CGO_LDFLAGS="$(MEMCHECK_CGO_LDFLAGS)" CGO_CXXFLAGS="$(MEMCHECK_CGO_CXXFLAGS)" $(GO) test -mod=vendor $(MEMCHECK_FLAGS) -v github.com/sonic-net/sonic-gnmi/telemetry
145+
sudo CGO_LDFLAGS="$(MEMCHECK_CGO_LDFLAGS)" CGO_CXXFLAGS="$(MEMCHECK_CGO_CXXFLAGS)" $(GO) test $(MEMCHECK_FLAGS) -v github.com/sonic-net/sonic-gnmi/sonic_db_config
146+
sudo CGO_LDFLAGS="$(MEMCHECK_CGO_LDFLAGS)" CGO_CXXFLAGS="$(MEMCHECK_CGO_CXXFLAGS)" $(GO) test -mod=vendor $(MEMCHECK_FLAGS) -v github.com/sonic-net/sonic-gnmi/gnmi_server -run TestGNMINative
147+
sudo CGO_LDFLAGS="$(MEMCHECK_CGO_LDFLAGS)" CGO_CXXFLAGS="$(MEMCHECK_CGO_CXXFLAGS)" $(GO) test -mod=vendor $(MEMCHECK_FLAGS) -v github.com/sonic-net/sonic-gnmi/sonic_data_client
148+
149+
136150
clean:
137151
$(RM) -r build
138152
$(RM) -r vendor

azure-pipelines.yml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ variables:
2323
value: $(System.PullRequest.TargetBranch)
2424
${{ else }}:
2525
value: $(Build.SourceBranchName)
26+
- name: UNIT_TEST_FLAG
27+
value: 'ENABLE_TRANSLIB_WRITE=y'
2628

2729
resources:
2830
repositories:
@@ -161,8 +163,13 @@ stages:
161163
162164
- script: |
163165
pushd sonic-gnmi
164-
make check_gotest ENABLE_TRANSLIB_WRITE=y
165-
displayName: "Test"
166+
make all && make check_memleak $(UNIT_TEST_FLAG)
167+
displayName: "Check memory leak"
168+
169+
- script: |
170+
pushd sonic-gnmi
171+
make all && make check_gotest $(UNIT_TEST_FLAG)
172+
displayName: "Run unit test"
166173
167174
- publish: $(Build.ArtifactStagingDirectory)/
168175
artifact: sonic-gnmi

gnmi_server/server_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4195,3 +4195,8 @@ func init() {
41954195
// Inform gNMI server to use redis tcp localhost connection
41964196
sdc.UseRedisLocalTcpPort = true
41974197
}
4198+
4199+
func TestMain(m *testing.M) {
4200+
defer test_utils.MemLeakCheck()
4201+
m.Run()
4202+
}

sonic_data_client/client_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
"github.com/jipanyang/gnxi/utils/xpath"
1515
"github.com/sonic-net/sonic-gnmi/swsscommon"
16+
"github.com/sonic-net/sonic-gnmi/test_utils"
1617
gnmipb "github.com/openconfig/gnmi/proto/gnmi"
1718
)
1819

@@ -624,3 +625,8 @@ func TestGetZmqClient(t *testing.T) {
624625
swsscommon.DeleteZmqClient(client)
625626
}
626627
}
628+
629+
func TestMain(m *testing.M) {
630+
defer test_utils.MemLeakCheck()
631+
m.Run()
632+
}

sonic_db_config/db_config_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,3 +351,8 @@ func TestGetDbMultiInstance(t *testing.T) {
351351
}
352352
})
353353
}
354+
355+
func TestMain(m *testing.M) {
356+
defer test_utils.MemLeakCheck()
357+
m.Run()
358+
}

telemetry/telemetry_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"testing"
1818
"flag"
1919
gnmi "github.com/sonic-net/sonic-gnmi/gnmi_server"
20+
"github.com/sonic-net/sonic-gnmi/test_utils"
2021
"github.com/agiledragon/gomonkey/v2"
2122
"os"
2223
"syscall"
@@ -858,3 +859,8 @@ func testHandlerSyscall(t *testing.T, signal os.Signal) {
858859
func sendSignal(serverControlSignal chan<- ServerControlValue, value ServerControlValue) {
859860
serverControlSignal <- value
860861
}
862+
863+
func TestMain(m *testing.M) {
864+
defer test_utils.MemLeakCheck()
865+
m.Run()
866+
}

test_utils/memcheck_disable.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// +build !gnmi_memcheck
2+
3+
package test_utils
4+
5+
func MemLeakCheck() {}

test_utils/memcheck_enable.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// +build gnmi_memcheck
2+
3+
package test_utils
4+
5+
// int __lsan_do_recoverable_leak_check(void);
6+
import "C"
7+
import "fmt"
8+
9+
func MemLeakCheck() {
10+
ret := int(C.__lsan_do_recoverable_leak_check())
11+
if ret != 0 {
12+
panic(fmt.Errorf("Detect memory leak!"))
13+
}
14+
}
15+

0 commit comments

Comments
 (0)