Некоторые проверки не удались
CI / test (push) Successful in 2m5s
Docker / Build and publish worker image (push) Failing after 31s
135 строки
3.8 KiB
Go
135 строки
3.8 KiB
Go
package crkn_test
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"rocketgit.ru/rsmon/worker/app/models"
|
|
"rocketgit.ru/rsmon/worker/checks/crkn"
|
|
"rocketgit.ru/rsmon/worker/config/database"
|
|
"rocketgit.ru/rsmon/worker/internal/netaddr"
|
|
)
|
|
|
|
func init() {
|
|
database.Init()
|
|
}
|
|
|
|
func TestPerform_DomainBlocked(t *testing.T) {
|
|
models.Drop()
|
|
models.Migrate()
|
|
|
|
require.NoError(t, models.ReplaceRknDomains([]string{"blocked.example.com"}))
|
|
|
|
monitor := &models.Monitor{Host: "blocked.example.com"}
|
|
result := crkn.Perform(monitor)
|
|
require.NotNil(t, result)
|
|
assert.Equal(t, "ERR", result.State)
|
|
assert.NotNil(t, result.Error)
|
|
assert.Contains(t, result.Error.Error(), "RKN registry")
|
|
assert.Contains(t, result.Warnings, "Resource is blocked in Russia according to RKN registry")
|
|
}
|
|
|
|
func TestPerform_DomainClean(t *testing.T) {
|
|
models.Drop()
|
|
models.Migrate()
|
|
|
|
require.NoError(t, models.ReplaceRknDomains([]string{"blocked.example.com"}))
|
|
|
|
monitor := &models.Monitor{Host: "clean.example.org"}
|
|
result := crkn.Perform(monitor)
|
|
require.NotNil(t, result)
|
|
assert.Equal(t, "OK", result.State)
|
|
assert.Nil(t, result.Error)
|
|
assert.Contains(t, result.Infos, "Resource is not in RKN registry")
|
|
}
|
|
|
|
func TestPerform_DomainSuffixMatch(t *testing.T) {
|
|
models.Drop()
|
|
models.Migrate()
|
|
|
|
require.NoError(t, models.ReplaceRknDomains([]string{"example.com"}))
|
|
|
|
monitor := &models.Monitor{Host: "sub.example.com"}
|
|
result := crkn.Perform(monitor)
|
|
require.NotNil(t, result)
|
|
assert.Equal(t, "ERR", result.State, "subdomain must match apex via IsRknDomainBlocked")
|
|
}
|
|
|
|
func TestPerform_IPBlocked(t *testing.T) {
|
|
models.Drop()
|
|
models.Migrate()
|
|
|
|
_, network, err := net.ParseCIDR("10.5.5.0/24")
|
|
require.NoError(t, err)
|
|
require.NoError(t, models.ReplaceRknIPs([]*net.IPNet{network}))
|
|
|
|
monitor := &models.Monitor{
|
|
Host: "clean.example.org",
|
|
DNSRecords: []models.DNSRecord{
|
|
{Kind: "A", Name: "clean.example.org", Value: netaddr.Inet{Inet: net.ParseIP("10.5.5.7")}},
|
|
},
|
|
}
|
|
result := crkn.Perform(monitor)
|
|
require.NotNil(t, result)
|
|
assert.Equal(t, "ERR", result.State)
|
|
assert.NotNil(t, result.Error)
|
|
assert.Contains(t, result.Error.Error(), "IP is contained in RKN registry")
|
|
}
|
|
|
|
func TestPerform_IPClean(t *testing.T) {
|
|
models.Drop()
|
|
models.Migrate()
|
|
|
|
_, network, err := net.ParseCIDR("10.0.0.0/8")
|
|
require.NoError(t, err)
|
|
require.NoError(t, models.ReplaceRknIPs([]*net.IPNet{network}))
|
|
|
|
monitor := &models.Monitor{
|
|
Host: "clean.example.org",
|
|
DNSRecords: []models.DNSRecord{
|
|
{Kind: "A", Name: "clean.example.org", Value: netaddr.Inet{Inet: net.ParseIP("8.8.8.8")}},
|
|
},
|
|
}
|
|
result := crkn.Perform(monitor)
|
|
require.NotNil(t, result)
|
|
assert.Equal(t, "OK", result.State)
|
|
}
|
|
|
|
func TestPerform_SkipsNonADNSRecords(t *testing.T) {
|
|
models.Drop()
|
|
models.Migrate()
|
|
|
|
_, network, err := net.ParseCIDR("10.0.0.0/8")
|
|
require.NoError(t, err)
|
|
require.NoError(t, models.ReplaceRknIPs([]*net.IPNet{network}))
|
|
|
|
monitor := &models.Monitor{
|
|
Host: "clean.example.org",
|
|
DNSRecords: []models.DNSRecord{
|
|
{Kind: "CNAME", Name: "clean.example.org", Value: netaddr.Inet{Inet: net.ParseIP("10.5.5.7")}},
|
|
{Kind: "TXT", Name: "clean.example.org", Value: netaddr.Inet{Inet: net.ParseIP("10.5.5.7")}},
|
|
},
|
|
}
|
|
result := crkn.Perform(monitor)
|
|
require.NotNil(t, result)
|
|
assert.Equal(t, "OK", result.State, "non-A/AAAA records must be skipped")
|
|
}
|
|
|
|
// TestPerform_FastReadOnly verifies the refactor removed the background
|
|
// goroutine that previously triggered a remote data refresh on every
|
|
// check — the call must return quickly and only depend on the local DB.
|
|
func TestPerform_FastReadOnly(t *testing.T) {
|
|
models.Drop()
|
|
models.Migrate()
|
|
require.NoError(t, models.ReplaceRknDomains([]string{"blocked.example.com"}))
|
|
|
|
monitor := &models.Monitor{Host: "blocked.example.com"}
|
|
|
|
result := crkn.Perform(monitor)
|
|
require.NotNil(t, result)
|
|
assert.Equal(t, "ERR", result.State)
|
|
}
|