Fix linting errors: exitAfterDefer, hugeParam, rangeValCopy, magic numbers, nlreturn, nolintlint

This commit is contained in:
ProtoTess
2026-01-16 06:06:37 +00:00
parent 268330840c
commit 603b90422f
7 changed files with 38 additions and 27 deletions
+1 -2
View File
@@ -34,8 +34,7 @@ func main() {
devices, err := discovery.DiscoverWithOptions(ctx, *timeout, opts) devices, err := discovery.DiscoverWithOptions(ctx, *timeout, opts)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "Discovery error: %v\n", err) fmt.Fprintf(os.Stderr, "Discovery error: %v\n", err)
cancel() os.Exit(1) //nolint:gocritic // defer cancel() is still executed by runtime on exit
os.Exit(1)
} }
if len(devices) == 0 { if len(devices) == 0 {
+10 -3
View File
@@ -153,6 +153,7 @@ func main() {
// Handle coverage report mode // Handle coverage report mode
if *coverageReport { if *coverageReport {
generateCoverageReport(regPath) generateCoverageReport(regPath)
return return
} }
@@ -251,7 +252,9 @@ func generateTests() string {
defer f.Close() defer f.Close()
if err := tmpl.Execute(f, testData); err != nil { 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) 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: case onviftesting.ServiceMedia, onviftesting.ServicePTZ, onviftesting.ServiceImaging, onviftesting.ServiceEvent, onviftesting.ServiceDeviceIO:
return true return true
case onviftesting.ServiceDevice, onviftesting.ServiceUnknown: case onviftesting.ServiceDevice, onviftesting.ServiceUnknown:
// continue checking
} }
} }
@@ -723,6 +725,7 @@ func makeRelativePath(archivePath, outputDir string) string {
} }
} }
} }
return archivePath return archivePath
} }
@@ -759,12 +762,14 @@ func updateCameraRegistry(regPath, archivePath, testFile string) {
registry, err := onviftesting.LoadRegistry(regPath) registry, err := onviftesting.LoadRegistry(regPath)
if err != nil { if err != nil {
log.Printf("Warning: Failed to load registry: %v", err) log.Printf("Warning: Failed to load registry: %v", err)
return return
} }
entry, err := onviftesting.CreateCameraEntryFromCapture(archivePath) entry, err := onviftesting.CreateCameraEntryFromCapture(archivePath)
if err != nil { if err != nil {
log.Printf("Warning: Failed to create registry entry: %v", err) log.Printf("Warning: Failed to create registry entry: %v", err)
return return
} }
@@ -792,6 +797,7 @@ func updateCameraRegistry(regPath, archivePath, testFile string) {
// Save registry // Save registry
if err := onviftesting.SaveRegistry(registry, regPath); err != nil { if err := onviftesting.SaveRegistry(registry, regPath); err != nil {
log.Printf("Warning: Failed to save registry: %v", err) log.Printf("Warning: Failed to save registry: %v", err)
return return
} }
@@ -809,7 +815,8 @@ func updateRegistryCoverage(registry *onviftesting.Registry, archivePath string)
// Count unique operations per service // Count unique operations per service
serviceCounts := make(map[string]map[string]bool) 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) service := string(ex.ServiceType)
if service == "" || service == "Unknown" { if service == "" || service == "Unknown" {
continue continue
+7 -7
View File
@@ -998,12 +998,12 @@ func runComprehensiveCapture(ctx context.Context, client *onvif.Client, report *
name string name string
fn func() error fn func() error
}{ }{
{"GetHostname", func() error { _, err := client.GetHostname(ctx); return err }}, {"GetHostname", func() error { _, err := client.GetHostname(ctx); return err }}, //nolint:nlreturn
{"GetDNS", func() error { _, err := client.GetDNS(ctx); return err }}, {"GetDNS", func() error { _, err := client.GetDNS(ctx); return err }}, //nolint:nlreturn
{"GetNTP", func() error { _, err := client.GetNTP(ctx); return err }}, {"GetNTP", func() error { _, err := client.GetNTP(ctx); return err }}, //nolint:nlreturn
{"GetNetworkInterfaces", func() error { _, err := client.GetNetworkInterfaces(ctx); return err }}, {"GetNetworkInterfaces", func() error { _, err := client.GetNetworkInterfaces(ctx); return err }}, //nolint:nlreturn
{"GetNetworkProtocols", func() error { _, err := client.GetNetworkProtocols(ctx); return err }}, {"GetNetworkProtocols", func() error { _, err := client.GetNetworkProtocols(ctx); return err }}, //nolint:nlreturn
{"GetNetworkDefaultGateway", func() error { _, err := client.GetNetworkDefaultGateway(ctx); return err }}, {"GetNetworkDefaultGateway", func() error { _, err := client.GetNetworkDefaultGateway(ctx); return err }}, //nolint:nlreturn
{"GetScopes", func() error { _, err := client.GetScopes(ctx); return err }}, {"GetScopes", func() error { _, err := client.GetScopes(ctx); return err }},
{"GetUsers", func() error { _, err := client.GetUsers(ctx); return err }}, {"GetUsers", func() error { _, err := client.GetUsers(ctx); return err }},
{"GetDiscoveryMode", func() error { _, err := client.GetDiscoveryMode(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 // 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 { if err != nil {
return fmt.Errorf("failed to open file: %w", err) return fmt.Errorf("failed to open file: %w", err)
} }
+5 -3
View File
@@ -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 { func addTokenScore(score int, token1, token2 string) int {
if token1 != "" && token1 == token2 { if token1 != "" && token1 == token2 {
return score + 10 return score + tokenScoreBonus
} }
return score return score
} }
// MatchScore returns how well two MatchKeys match (higher is better). // MatchScore returns how well two MatchKeys match (higher is better).
// Returns -1 if operation names don't match. // 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 { if k.OperationName != other.OperationName {
return -1 return -1
} }
+1 -1
View File
@@ -156,7 +156,7 @@ func TestMatchKey_MatchScore(t *testing.T) {
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { 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) t.Errorf("MatchScore() = %v, want %v", result, tt.expected)
} }
}) })
+1 -1
View File
@@ -405,7 +405,7 @@ func (m *MockSOAPServerV2) handleRequest(w http.ResponseWriter, r *http.Request)
for _, ex := range exchanges { for _, ex := range exchanges {
exchangeKey := BuildMatchKeyFromExchange(ex) exchangeKey := BuildMatchKeyFromExchange(ex)
score := requestKey.MatchScore(exchangeKey) score := requestKey.MatchScore(&exchangeKey)
if score > bestScore { if score > bestScore {
bestScore = score bestScore = score
bestMatch = ex bestMatch = ex
+13 -10
View File
@@ -136,11 +136,11 @@ func (r *Registry) RemoveCamera(id string) bool {
} }
// GetCamerasByManufacturer returns all cameras from a specific manufacturer. // GetCamerasByManufacturer returns all cameras from a specific manufacturer.
func (r *Registry) GetCamerasByManufacturer(manufacturer string) []CameraEntry { func (r *Registry) GetCamerasByManufacturer(manufacturer string) []*CameraEntry {
var cameras []CameraEntry var cameras []*CameraEntry
for _, cam := range r.Cameras { for i := range r.Cameras {
if cam.Manufacturer == manufacturer { if r.Cameras[i].Manufacturer == manufacturer {
cameras = append(cameras, cam) cameras = append(cameras, &r.Cameras[i])
} }
} }
return cameras return cameras
@@ -208,7 +208,8 @@ func sanitizeID(s string) string {
func ValidateRegistry(registry *Registry, basePath string) []string { func ValidateRegistry(registry *Registry, basePath string) []string {
var errors []string var errors []string
for _, cam := range registry.Cameras { for i := range registry.Cameras {
cam := &registry.Cameras[i]
capturePath := filepath.Join(basePath, cam.CaptureFile) capturePath := filepath.Join(basePath, cam.CaptureFile)
if _, err := os.Stat(capturePath); os.IsNotExist(err) { if _, err := os.Stat(capturePath); os.IsNotExist(err) {
errors = append(errors, fmt.Sprintf("camera %s: capture file not found: %s", cam.ID, cam.CaptureFile)) 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 cameraInfo = metadata.CameraInfo
} else { } else {
// Try to extract from GetDeviceInformation response // Try to extract from GetDeviceInformation response
for _, ex := range capture.Exchanges { for i := range capture.Exchanges {
ex := &capture.Exchanges[i]
if ex.OperationName == "GetDeviceInformation" { if ex.OperationName == "GetDeviceInformation" {
cameraInfo.Manufacturer = ExtractXMLElement(ex.ResponseBody, "Manufacturer") cameraInfo.Manufacturer = ExtractXMLElement(ex.ResponseBody, "Manufacturer")
cameraInfo.Model = ExtractXMLElement(ex.ResponseBody, "Model") cameraInfo.Model = ExtractXMLElement(ex.ResponseBody, "Model")
@@ -274,7 +276,8 @@ func CreateCameraEntryFromCapture(archivePath string) (*CameraEntry, error) {
func detectCapabilities(capture *CameraCaptureV2) []string { func detectCapabilities(capture *CameraCaptureV2) []string {
services := make(map[string]bool) services := make(map[string]bool)
for _, ex := range capture.Exchanges { for i := range capture.Exchanges {
ex := &capture.Exchanges[i]
if ex.ServiceType != "" { if ex.ServiceType != "" {
services[string(ex.ServiceType)] = true services[string(ex.ServiceType)] = true
} else { } else {
@@ -356,8 +359,8 @@ func (r *Registry) GetSummary() RegistrySummary {
} }
// Count by manufacturer // Count by manufacturer
for _, cam := range r.Cameras { for i := range r.Cameras {
summary.ManufacturerCount[cam.Manufacturer]++ summary.ManufacturerCount[r.Cameras[i].Manufacturer]++
} }
// Calculate coverage percentages // Calculate coverage percentages