From a2fcb182d8d40a27eb3f6be48bba1c451e515886 Mon Sep 17 00:00:00 2001 From: vovanbravin Date: Thu, 16 Apr 2026 18:17:10 +0300 Subject: [PATCH] test: add and fix tests url database --- .../internal/service/tests/categories_test.go | 8 +- .../service/tests/categories_test.json | 36 ----- .../service/tests/http_client_test.go | 150 ++++++++++++------ .../internal/service/tests/service_test.go | 59 +++++++ 4 files changed, 166 insertions(+), 87 deletions(-) delete mode 100644 controller/internal/service/tests/categories_test.json create mode 100644 controller/internal/service/tests/service_test.go diff --git a/controller/internal/service/tests/categories_test.go b/controller/internal/service/tests/categories_test.go index a92de27..5a69c55 100644 --- a/controller/internal/service/tests/categories_test.go +++ b/controller/internal/service/tests/categories_test.go @@ -12,7 +12,7 @@ var testCategories = models.CategoryList{ ID: 1, Name: "Phishing", TrustLevel: 5, - Description: "Фишинговые сайты", + Description: "Phishing sites", Mappings: map[string][]string{ "kaspersky": {"Phishing", "Fraud"}, "virustotal": {"phishing", "scam"}, @@ -23,7 +23,7 @@ var testCategories = models.CategoryList{ ID: 2, Name: "Malware", TrustLevel: 5, - Description: "Вредоносное ПО", + Description: "Malicious software", Mappings: map[string][]string{ "kaspersky": {"Malware", "Virus"}, "virustotal": {"malware"}, @@ -34,7 +34,7 @@ var testCategories = models.CategoryList{ } func TestCategoryLoadFromFile(t *testing.T) { - filename := "categories_test.json" + filename := "../config/categories.json" list := models.CategoryList{} err := list.LoadFromFile(filename) @@ -89,4 +89,4 @@ func TestCategoryGet_CheckMappings(t *testing.T) { provider, len(cat.Mappings[provider]), expectedLen) } } -} +} \ No newline at end of file diff --git a/controller/internal/service/tests/categories_test.json b/controller/internal/service/tests/categories_test.json deleted file mode 100644 index cfa87e2..0000000 --- a/controller/internal/service/tests/categories_test.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "categories": [ - { - "id": 1, - "name": "Advertising", - "risk_level": 4, - "description": "Sites with advertisements, banners, pop-ups", - "mappings": { - "kaspersky": ["Advertisements"], - "virustotal": ["advertising"] - } - }, - { - "id": 2, - "name": "Alcohol and Tobacco", - "risk_level": 2, - "description": "Sale and promotion of alcohol and tobacco products", - "mappings": { - "kaspersky": ["Alcohol", "Tobacco"], - "virustotal": ["alcohol", "tobacco", "smoking"], - "skydns": ["6"] - } - }, - { - "id": 3, - "name": "Anonymizers", - "risk_level": 5, - "description": "Sites for anonymous browsing, bypassing blocks", - "mappings": { - "kaspersky": ["Anonymizers", "Proxy"], - "virustotal": ["anonymizer", "proxy", "vpn"], - "skydns": [] - } - } - ] -} \ No newline at end of file diff --git a/controller/internal/service/tests/http_client_test.go b/controller/internal/service/tests/http_client_test.go index 9a1c7ba..bc9239b 100644 --- a/controller/internal/service/tests/http_client_test.go +++ b/controller/internal/service/tests/http_client_test.go @@ -1,11 +1,11 @@ package tests import ( - "github.com/moevm/grpc_server/internal/service/client" - "github.com/moevm/grpc_server/internal/service/models" "os" "testing" "time" + "github.com/moevm/grpc_server/internal/service/client" + "github.com/moevm/grpc_server/internal/service/models" "github.com/joho/godotenv" ) @@ -51,66 +51,122 @@ func TestHttpClientRequest(t *testing.T) { provider := getKasperskyProvider() tests := []struct { - name string - providerName string - provider models.Provider - checkValue string - endpointName string - shouldSucceed bool + name string + providerName string + provider models.Provider + checkValue string + endpointName string + expectError bool }{ { - name: "Not exist endpoint", - providerName: "kaspersky", - provider: provider, - checkValue: "8.8.8.8", - endpointName: "ip_not_exist", - shouldSucceed: false, + name: "Not exist endpoint", + providerName: "kaspersky", + provider: provider, + checkValue: "8.8.8.8", + endpointName: "ip_not_exist", + expectError: true, + }, + { + name: "Domain check", + providerName: "kaspersky", + provider: provider, + checkValue: "1xbet.com", + endpointName: "domain", + expectError: false, + }, + { + name: "IP check", + providerName: "kaspersky", + provider: provider, + checkValue: "8.8.8.8", + endpointName: "ip", + expectError: false, + }, + { + name: "Empty check value", + providerName: "kaspersky", + provider: provider, + checkValue: "", + endpointName: "ip", + expectError: false, + }, + { + name: "Invalid IP format", + providerName: "kaspersky", + provider: provider, + checkValue: "999.999.999.999", + endpointName: "ip", + expectError: false, + }, + { + name: "Invalid domain format", + providerName: "kaspersky", + provider: provider, + checkValue: "invalid_domain", + endpointName: "domain", + expectError: false, + }, + { + name: "Missing API key", + providerName: "kaspersky", + provider: models.Provider{ + BaseURL: provider.BaseURL, + Headers: map[string]string{}, + Endpoints: provider.Endpoints, + }, + checkValue: "8.8.8.8", + endpointName: "ip", + expectError: false, }, { - name: "Domain check", - providerName: "kaspersky", - provider: provider, - checkValue: "1xbet.com", - endpointName: "domain", - shouldSucceed: true, + name: "Very long domain", + providerName: "kaspersky", + provider: provider, + checkValue: string(make([]byte, 300)), + endpointName: "domain", + expectError: false, }, { - name: "IP check", - providerName: "kaspersky", - provider: provider, - checkValue: "8.8.8.8", - endpointName: "ip", - shouldSucceed: true, + name: "Special characters input", + providerName: "kaspersky", + provider: provider, + checkValue: "!@#$%^&*()", + endpointName: "domain", + expectError: false, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - resp, err := httpClient.Request(tt.providerName, tt.provider, tt.checkValue, tt.endpointName) - - if tt.shouldSucceed { - if err != nil { - t.Errorf("Expected success but got error: %v", err) - return - } - if resp == nil { - t.Error("Response is nil") - return - } - err = resp.Body.Close() - if err != nil { - t.Errorf("Error to close body: %v", err) - return - } + resp, err := httpClient.Request( + tt.providerName, + tt.provider, + tt.checkValue, + tt.endpointName, + ) - if resp.StatusCode != 200 { - t.Errorf("Expected status 200, got %d", resp.StatusCode) - } - } else { + if tt.expectError { if err == nil { t.Error("Expected error but got success") } + return + } + + if err != nil { + t.Errorf("Unexpected error: %v", err) + return + } + + if resp == nil { + t.Error("Response is nil") + return + } + + defer resp.Body.Close() + + if resp.StatusCode == 0 { + t.Error("Invalid status code") } }) } -} +} \ No newline at end of file diff --git a/controller/internal/service/tests/service_test.go b/controller/internal/service/tests/service_test.go new file mode 100644 index 0000000..b069312 --- /dev/null +++ b/controller/internal/service/tests/service_test.go @@ -0,0 +1,59 @@ +package tests + +import ( + "reflect" + "testing" + + "github.com/moevm/grpc_server/internal/service/service" +) + +func TestService(t *testing.T) { + serv, err := service.NewService("../config/categories.json", "../config/providers.json") + + if err != nil { + t.Error(err) + } + + tests := []struct { + name string + endpointName string + checkValue string + expected []int + }{ + { + name: "Check gambling", + endpointName: "domain", + checkValue: "1xbet.com", + expected: []int{2}, + }, + { + name: "Check social media", + endpointName: "domain", + checkValue: "vk.com", + expected: []int{7}, + }, { + name: "Check non-existent domain", + endpointName: "domain", + checkValue: "this-domain-does-not-exist.example", + expected: []int{}, + }, { + name: "Check empty domain", + endpointName: "domain", + checkValue: "", + expected: []int{}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + res, err := serv.Check(tt.checkValue, tt.endpointName) + if err != nil { + t.Error(err) + } + + if !reflect.DeepEqual(tt.expected, res) { + t.Errorf("got %v expected %v", res, tt.expected) + } + }) + } +} \ No newline at end of file