Fix linting errors: exitAfterDefer, hugeParam, rangeValCopy, magic numbers, nlreturn, nolintlint
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -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
@@ -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 := ®istry.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
|
||||||
|
|||||||
Reference in New Issue
Block a user