master
go 122 lines 3.79 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package main
4
5 import (
6 "testing"
7
8 "github.com/stretchr/testify/require"
9 )
10
11 func TestParseSourceToken(t *testing.T) {
12 source, err := parseSourceToken(sourceFamilyGeo, "dbip:city-lite@csv")
13 require.NoError(t, err)
14 require.Equal(t, sourceFamilyGeo, source.family)
15 require.Equal(t, providerDBIP, source.provider)
16 require.Equal(t, artifactDBIPCityLite, source.artifact)
17 require.Equal(t, formatCSV, source.format)
18 require.Equal(t, "dbip-city-lite", source.name)
19 }
20
21 func TestParseSourceTokenUsesBuiltInDefaultFormat(t *testing.T) {
22 source, err := parseSourceToken(sourceFamilyASN, "dbip:asn-lite")
23 require.NoError(t, err)
24 require.Equal(t, formatMMDB, source.format)
25 }
26
27 func TestParseSourceTokenSupportsAllBuiltInProviderFamilies(t *testing.T) {
28 tests := map[string]struct {
29 family string
30 token string
31 provider string
32 artifact string
33 format string
34 }{
35 "caida asn": {
36 family: sourceFamilyASN,
37 token: "caida:prefix2as",
38 provider: providerCAIDA,
39 artifact: artifactCAIDAPrefix2AS,
40 format: formatTSV,
41 },
42 "maxmind asn": {
43 family: sourceFamilyASN,
44 token: "maxmind:geolite2-asn",
45 provider: providerMaxMind,
46 artifact: artifactMaxMindGeoLite2ASN,
47 format: formatMMDB,
48 },
49 "maxmind country": {
50 family: sourceFamilyGeo,
51 token: "maxmind:geolite2-country",
52 provider: providerMaxMind,
53 artifact: artifactMaxMindGeoLite2Country,
54 format: formatCSV,
55 },
56 "ip2location country": {
57 family: sourceFamilyGeo,
58 token: "ip2location:country-lite",
59 provider: providerIP2Location,
60 artifact: artifactIP2LocationCountryLite,
61 format: formatCSV,
62 },
63 "ipdeny country": {
64 family: sourceFamilyGeo,
65 token: "ipdeny:country-zones",
66 provider: providerIPDeny,
67 artifact: artifactIPDenyCountryZones,
68 format: formatCIDR,
69 },
70 "ipip country": {
71 family: sourceFamilyGeo,
72 token: "ipip:country",
73 provider: providerIPIP,
74 artifact: artifactIPIPCountry,
75 format: formatTXT,
76 },
77 }
78
79 for name, tc := range tests {
80 t.Run(name, func(t *testing.T) {
81 source, err := parseSourceToken(tc.family, tc.token)
82 require.NoError(t, err)
83 require.Equal(t, tc.provider, source.provider)
84 require.Equal(t, tc.artifact, source.artifact)
85 require.Equal(t, tc.format, source.format)
86 })
87 }
88 }
89
90 func TestParseSourceTokenRejectsInvalidFamilyArtifactCombination(t *testing.T) {
91 _, err := parseSourceToken(sourceFamilyGeo, "dbip:asn-lite")
92 require.Error(t, err)
93 require.Contains(t, err.Error(), "not compatible with family")
94 }
95
96 func TestApplyFamilyOverrideReplacesOnlyTargetFamily(t *testing.T) {
97 current := []sourceEntry{
98 {family: sourceFamilyASN, provider: providerDBIP, artifact: artifactDBIPASNLite, format: formatMMDB},
99 {family: sourceFamilyGeo, provider: providerDBIP, artifact: artifactDBIPCityLite, format: formatMMDB},
100 }
101 override := []sourceEntry{
102 {family: sourceFamilyASN, provider: providerIPToASN, artifact: artifactIPToASNCombined, format: formatTSV},
103 }
104
105 next := applyFamilyOverride(current, sourceFamilyASN, override, false)
106 require.Equal(t, []sourceEntry{
107 {family: sourceFamilyGeo, provider: providerDBIP, artifact: artifactDBIPCityLite, format: formatMMDB},
108 {family: sourceFamilyASN, provider: providerIPToASN, artifact: artifactIPToASNCombined, format: formatTSV},
109 }, next)
110 }
111
112 func TestApplyFamilyOverrideDisablesFamily(t *testing.T) {
113 current := []sourceEntry{
114 {family: sourceFamilyASN, provider: providerDBIP, artifact: artifactDBIPASNLite, format: formatMMDB},
115 {family: sourceFamilyGeo, provider: providerDBIP, artifact: artifactDBIPCityLite, format: formatMMDB},
116 }
117
118 next := applyFamilyOverride(current, sourceFamilyGeo, nil, true)
119 require.Equal(t, []sourceEntry{
120 {family: sourceFamilyASN, provider: providerDBIP, artifact: artifactDBIPASNLite, format: formatMMDB},
121 }, next)
122 }