diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 27b91e2..f848935 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -7,6 +7,8 @@ jobs: steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 + - name: Install dependencies + run: sudo apt update && sudo apt install libsnmp-dev - name: Build run: go build ./cmd/snmp-proxy - name: Upload binaries @@ -21,8 +23,8 @@ jobs: steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 - - name: Install pip3 - run: sudo apt install python3-pip + - name: Install dependencies + run: sudo apt update && sudo apt install libsnmp-dev python3-pip snmp-mibs-downloader - name: Install snmpsim run: sudo pip3 install snmpsim - name: Run tests @@ -34,8 +36,8 @@ jobs: steps: - uses: actions/checkout@v2 - uses: actions/setup-go@v2 - - name: Install pip3 - run: sudo apt install python3-pip + - name: Install dependencies + run: sudo apt update && sudo apt install libsnmp-dev python3-pip snmp-mibs-downloader - name: Install snmpsim run: sudo pip3 install snmpsim - name: Download go-acc @@ -47,12 +49,21 @@ jobs: with: path-to-profile: coverage.cov +# lint: +# name: Lint +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v2 +# - name: golangci-lint +# uses: golangci/golangci-lint-action@v1 +# with: +# version: v1.27 + lint: name: Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: golangci-lint - uses: golangci/golangci-lint-action@v1 - with: - version: v1.27 + - uses: actions/setup-go@v2 + - name: Run linter + run: make lint || { bin/golangci-lint cache clean && bin/golangci-lint run -v ;} diff --git a/Makefile b/Makefile index 4dfff58..aae45ce 100644 --- a/Makefile +++ b/Makefile @@ -24,5 +24,9 @@ test: timeout 300 go test --race ./... timeout 300 go test --count 100 ./... +.PHONY: clean +clean: + rm -rf bin + $(BIN)/golangci-lint: curl --retry 5 -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.27.0 diff --git a/cmd/snmp-proxy/snmp-proxy.go b/cmd/snmp-proxy/snmp-proxy.go index 85b0c0a..89f447d 100644 --- a/cmd/snmp-proxy/snmp-proxy.go +++ b/cmd/snmp-proxy/snmp-proxy.go @@ -24,6 +24,7 @@ func main() { } mibParser := snmpproxy.NewNetsnmpMibParser(config.Logger, config.Snmp.StrictMibParsing) + displayHints, err := mibParser.Parse() if err != nil { config.Logger.Fatalw("mib parser error: ", zap.Error(err)) diff --git a/snmpproxy/mib.go b/snmpproxy/mib.go index 89fe4a2..0a38b99 100644 --- a/snmpproxy/mib.go +++ b/snmpproxy/mib.go @@ -53,6 +53,7 @@ func (p *NetsnmpMibParser) Parse() (DisplayHints, error) { defer w.Close() stderrFd := int(os.Stderr.Fd()) + savedStderrFd, err := syscall.Dup(stderrFd) if err != nil { return nil, err @@ -88,7 +89,7 @@ func (p *NetsnmpMibParser) Parse() (DisplayHints, error) { // Restore stderr _ = w.Close() _ = syscall.Close(stderrFd) - syscall.Dup2(savedStderrFd, stderrFd) + _ = syscall.Dup2(savedStderrFd, stderrFd) _ = syscall.Close(savedStderrFd) if err := <-errChan; err != nil { diff --git a/snmpproxy/mib_test.go b/snmpproxy/mib_test.go index 45992f3..ff53d56 100644 --- a/snmpproxy/mib_test.go +++ b/snmpproxy/mib_test.go @@ -10,11 +10,15 @@ import ( ) func TestNetsnmpMibParser_Parse(t *testing.T) { - mibParser := snmpproxy.NewNetsnmpMibParser(zap.NewNop().Sugar(), true) + require := require.New(t) + + mibParser := snmpproxy.NewNetsnmpMibParser(zap.NewNop().Sugar(), false) displayHints, err := mibParser.Parse() - require.NoError(t, err) - require.Equal(t, snmpproxy.DisplayHints{}, displayHints) + require.NoError(err) + require.NotEmpty(displayHints) + require.Equal(snmpproxy.DisplayHintString, displayHints[".1.3.6.1.2.1.2.2.1.2"]) + require.Equal(snmpproxy.DisplayHintHexadecimal, displayHints[".1.3.6.1.2.1.4.22.1.2"]) } func TestMibDataProvider_GetStringType(t *testing.T) {