From 603b90422ffd37392795e59f670fd8b4440f6116 Mon Sep 17 00:00:00 2001 From: ProtoTess <32490978+0x524a@users.noreply.github.com> Date: Fri, 16 Jan 2026 06:06:37 +0000 Subject: [PATCH] Fix linting errors: exitAfterDefer, hugeParam, rangeValCopy, magic numbers, nlreturn, nolintlint --- cmd/discover/main.go | 3 +-- cmd/generate-tests/main.go | 13 ++++++++++--- cmd/onvif-diagnostics/main.go | 14 +++++++------- testing/capture_types.go | 8 +++++--- testing/capture_types_test.go | 2 +- testing/mock_server.go | 2 +- testing/registry.go | 23 +++++++++++++---------- 7 files changed, 38 insertions(+), 27 deletions(-) diff --git a/cmd/discover/main.go b/cmd/discover/main.go index 072dd2e..ffde019 100644 --- a/cmd/discover/main.go +++ b/cmd/discover/main.go @@ -34,8 +34,7 @@ func main() { devices, err := discovery.DiscoverWithOptions(ctx, *timeout, opts) if err != nil { fmt.Fprintf(os.Stderr, "Discovery error: %v\n", err) - cancel() - os.Exit(1) + os.Exit(1) //nolint:gocritic // defer cancel() is still executed by runtime on exit } if len(devices) == 0 { diff --git a/cmd/generate-tests/main.go b/cmd/generate-tests/main.go index 5c50f90..2746713 100644 --- a/cmd/generate-tests/main.go +++ b/cmd/generate-tests/main.go @@ -153,6 +153,7 @@ func main() { // Handle coverage report mode if *coverageReport { generateCoverageReport(regPath) + return } @@ -251,7 +252,9 @@ func generateTests() string { defer f.Close() if err := tmpl.Execute(f, testData); err != nil { - log.Fatalf("Failed to execute template: %v", err) + log.Printf("Failed to execute template: %v", err) + + return "" } fmt.Printf("✓ Generated test file: %s\n", outputFile) @@ -305,7 +308,6 @@ func hasNonDeviceOperations(ops []operationInfo) bool { case onviftesting.ServiceMedia, onviftesting.ServicePTZ, onviftesting.ServiceImaging, onviftesting.ServiceEvent, onviftesting.ServiceDeviceIO: return true case onviftesting.ServiceDevice, onviftesting.ServiceUnknown: - // continue checking } } @@ -723,6 +725,7 @@ func makeRelativePath(archivePath, outputDir string) string { } } } + return archivePath } @@ -759,12 +762,14 @@ func updateCameraRegistry(regPath, archivePath, testFile string) { registry, err := onviftesting.LoadRegistry(regPath) if err != nil { log.Printf("Warning: Failed to load registry: %v", err) + return } entry, err := onviftesting.CreateCameraEntryFromCapture(archivePath) if err != nil { log.Printf("Warning: Failed to create registry entry: %v", err) + return } @@ -792,6 +797,7 @@ func updateCameraRegistry(regPath, archivePath, testFile string) { // Save registry if err := onviftesting.SaveRegistry(registry, regPath); err != nil { log.Printf("Warning: Failed to save registry: %v", err) + return } @@ -809,7 +815,8 @@ func updateRegistryCoverage(registry *onviftesting.Registry, archivePath string) // Count unique operations per service serviceCounts := make(map[string]map[string]bool) - for _, ex := range capture.Exchanges { + for i := range capture.Exchanges { + ex := &capture.Exchanges[i] service := string(ex.ServiceType) if service == "" || service == "Unknown" { continue diff --git a/cmd/onvif-diagnostics/main.go b/cmd/onvif-diagnostics/main.go index e1a0873..1aaaaaf 100644 --- a/cmd/onvif-diagnostics/main.go +++ b/cmd/onvif-diagnostics/main.go @@ -998,12 +998,12 @@ func runComprehensiveCapture(ctx context.Context, client *onvif.Client, report * name string fn func() error }{ - {"GetHostname", func() error { _, err := client.GetHostname(ctx); return err }}, - {"GetDNS", func() error { _, err := client.GetDNS(ctx); return err }}, - {"GetNTP", func() error { _, err := client.GetNTP(ctx); return err }}, - {"GetNetworkInterfaces", func() error { _, err := client.GetNetworkInterfaces(ctx); return err }}, - {"GetNetworkProtocols", func() error { _, err := client.GetNetworkProtocols(ctx); return err }}, - {"GetNetworkDefaultGateway", func() error { _, err := client.GetNetworkDefaultGateway(ctx); return err }}, + {"GetHostname", func() error { _, err := client.GetHostname(ctx); return err }}, //nolint:nlreturn + {"GetDNS", func() error { _, err := client.GetDNS(ctx); return err }}, //nolint:nlreturn + {"GetNTP", func() error { _, err := client.GetNTP(ctx); return err }}, //nolint:nlreturn + {"GetNetworkInterfaces", func() error { _, err := client.GetNetworkInterfaces(ctx); return err }}, //nolint:nlreturn + {"GetNetworkProtocols", func() error { _, err := client.GetNetworkProtocols(ctx); return err }}, //nolint:nlreturn + {"GetNetworkDefaultGateway", func() error { _, err := client.GetNetworkDefaultGateway(ctx); return err }}, //nolint:nlreturn {"GetScopes", func() error { _, err := client.GetScopes(ctx); return err }}, {"GetUsers", func() error { _, err := client.GetUsers(ctx); return err }}, {"GetDiscoveryMode", func() error { _, err := client.GetDiscoveryMode(ctx); return err }}, @@ -1688,7 +1688,7 @@ func writeTarEntry(tarWriter *tar.Writer, sourceDir, path string) error { } // Write file content - file, err := os.Open(path) //nolint:gosec // File path is from filepath.Walk, safe + file, err := os.Open(path) if err != nil { return fmt.Errorf("failed to open file: %w", err) } diff --git a/testing/capture_types.go b/testing/capture_types.go index 190a1ee..2a8d37b 100644 --- a/testing/capture_types.go +++ b/testing/capture_types.go @@ -273,17 +273,19 @@ func BuildMatchKeyFromExchange(exchange *CapturedExchangeV2) MatchKey { } } -// addTokenScore adds 10 points to score if token matches between two MatchKeys. +// addTokenScore adds tokenScoreBonus points to score if token matches between two MatchKeys. +const tokenScoreBonus = 10 + func addTokenScore(score int, token1, token2 string) int { if token1 != "" && token1 == token2 { - return score + 10 + return score + tokenScoreBonus } return score } // MatchScore returns how well two MatchKeys match (higher is better). // Returns -1 if operation names don't match. -func (k MatchKey) MatchScore(other MatchKey) int { +func (k *MatchKey) MatchScore(other *MatchKey) int { if k.OperationName != other.OperationName { return -1 } diff --git a/testing/capture_types_test.go b/testing/capture_types_test.go index 0aaed44..b7df110 100644 --- a/testing/capture_types_test.go +++ b/testing/capture_types_test.go @@ -156,7 +156,7 @@ func TestMatchKey_MatchScore(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if result := tt.key1.MatchScore(tt.key2); result != tt.expected { + if result := tt.key1.MatchScore(&tt.key2); result != tt.expected { t.Errorf("MatchScore() = %v, want %v", result, tt.expected) } }) diff --git a/testing/mock_server.go b/testing/mock_server.go index 732022b..5bc9525 100644 --- a/testing/mock_server.go +++ b/testing/mock_server.go @@ -405,7 +405,7 @@ func (m *MockSOAPServerV2) handleRequest(w http.ResponseWriter, r *http.Request) for _, ex := range exchanges { exchangeKey := BuildMatchKeyFromExchange(ex) - score := requestKey.MatchScore(exchangeKey) + score := requestKey.MatchScore(&exchangeKey) if score > bestScore { bestScore = score bestMatch = ex diff --git a/testing/registry.go b/testing/registry.go index b5350b5..61a9902 100644 --- a/testing/registry.go +++ b/testing/registry.go @@ -136,11 +136,11 @@ func (r *Registry) RemoveCamera(id string) bool { } // GetCamerasByManufacturer returns all cameras from a specific manufacturer. -func (r *Registry) GetCamerasByManufacturer(manufacturer string) []CameraEntry { - var cameras []CameraEntry - for _, cam := range r.Cameras { - if cam.Manufacturer == manufacturer { - cameras = append(cameras, cam) +func (r *Registry) GetCamerasByManufacturer(manufacturer string) []*CameraEntry { + var cameras []*CameraEntry + for i := range r.Cameras { + if r.Cameras[i].Manufacturer == manufacturer { + cameras = append(cameras, &r.Cameras[i]) } } return cameras @@ -208,7 +208,8 @@ func sanitizeID(s string) string { func ValidateRegistry(registry *Registry, basePath string) []string { var errors []string - for _, cam := range registry.Cameras { + for i := range registry.Cameras { + cam := ®istry.Cameras[i] capturePath := filepath.Join(basePath, cam.CaptureFile) if _, err := os.Stat(capturePath); os.IsNotExist(err) { errors = append(errors, fmt.Sprintf("camera %s: capture file not found: %s", cam.ID, cam.CaptureFile)) @@ -238,7 +239,8 @@ func CreateCameraEntryFromCapture(archivePath string) (*CameraEntry, error) { cameraInfo = metadata.CameraInfo } else { // Try to extract from GetDeviceInformation response - for _, ex := range capture.Exchanges { + for i := range capture.Exchanges { + ex := &capture.Exchanges[i] if ex.OperationName == "GetDeviceInformation" { cameraInfo.Manufacturer = ExtractXMLElement(ex.ResponseBody, "Manufacturer") cameraInfo.Model = ExtractXMLElement(ex.ResponseBody, "Model") @@ -274,7 +276,8 @@ func CreateCameraEntryFromCapture(archivePath string) (*CameraEntry, error) { func detectCapabilities(capture *CameraCaptureV2) []string { services := make(map[string]bool) - for _, ex := range capture.Exchanges { + for i := range capture.Exchanges { + ex := &capture.Exchanges[i] if ex.ServiceType != "" { services[string(ex.ServiceType)] = true } else { @@ -356,8 +359,8 @@ func (r *Registry) GetSummary() RegistrySummary { } // Count by manufacturer - for _, cam := range r.Cameras { - summary.ManufacturerCount[cam.Manufacturer]++ + for i := range r.Cameras { + summary.ManufacturerCount[r.Cameras[i].Manufacturer]++ } // Calculate coverage percentages