[INS-461] Add test to ensure new detectors are registered in defaults.go (#4915)
* add test to ensure new detectors are registered in defaults.go * fix lint
This commit is contained in:
@@ -65,3 +65,277 @@ func TestDefaultVersionerDetectorsHaveNonZeroVersions(t *testing.T) {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// TestAllDetectorTypesAreInDefaultList ensures every proto-defined DetectorType
|
||||
// is either present in buildDetectorList() or explicitly excluded below.
|
||||
//
|
||||
// If you add a new DetectorType to the proto:
|
||||
// - Add its scanner to buildDetectorList() in defaults.go, OR
|
||||
// - Add it to excludedFromDefaultList in this test.
|
||||
func TestAllDetectorTypesAreInDefaultList(t *testing.T) {
|
||||
activeTypes := make(map[detector_typepb.DetectorType]struct{})
|
||||
for _, d := range DefaultDetectors() {
|
||||
activeTypes[d.Type()] = struct{}{}
|
||||
}
|
||||
|
||||
for typeInt32, typeName := range detector_typepb.DetectorType_name {
|
||||
dt := detector_typepb.DetectorType(typeInt32)
|
||||
if _, ok := activeTypes[dt]; ok {
|
||||
continue
|
||||
}
|
||||
if _, ok := excludedFromDefaultList[dt]; ok {
|
||||
continue
|
||||
}
|
||||
t.Errorf(
|
||||
"DetectorType %q (value %d) is missing from buildDetectorList(); "+
|
||||
"add it to defaults.go or to excludedFromDefaultList in this test",
|
||||
typeName, typeInt32,
|
||||
)
|
||||
}
|
||||
|
||||
// Reverse check: no excluded type should appear in the active list.
|
||||
// This catches types that were added to the exclude list by mistake.
|
||||
for dt := range excludedFromDefaultList {
|
||||
if _, ok := activeTypes[dt]; ok {
|
||||
t.Errorf(
|
||||
"DetectorType %q is in excludedFromDefaultList but is also present in buildDetectorList(); "+
|
||||
"remove it from excludedFromDefaultList",
|
||||
detector_typepb.DetectorType_name[int32(dt)],
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// excludedFromDefaultList contains detector types that are intentionally absent
|
||||
// from buildDetectorList(). Keep entries grouped and sorted.
|
||||
//
|
||||
// TODO: audit this list periodically — entries in the "mistakenly missed" group
|
||||
// should be removed once the corresponding detector is added to defaults.go.
|
||||
var excludedFromDefaultList = map[detector_typepb.DetectorType]struct{}{
|
||||
// TODO: these detectors have implementations but were mistakenly never added
|
||||
// to buildDetectorList() — discovered by TestAllDetectorTypesAreInDefaultList.
|
||||
// They are not added immediately out of caution for the impact on customers/users.
|
||||
// Remove each entry once its detector has been carefully added.
|
||||
detector_typepb.DetectorType_BitbucketDataCenter: {},
|
||||
detector_typepb.DetectorType_DatadogApikey: {},
|
||||
detector_typepb.DetectorType_Guru: {},
|
||||
detector_typepb.DetectorType_IPInfo: {},
|
||||
detector_typepb.DetectorType_Lob: {},
|
||||
detector_typepb.DetectorType_Rev: {},
|
||||
detector_typepb.DetectorType_TLy: {},
|
||||
detector_typepb.DetectorType_Tru: {},
|
||||
detector_typepb.DetectorType_User: {},
|
||||
detector_typepb.DetectorType_Wit: {},
|
||||
|
||||
// Reserved / special types.
|
||||
detector_typepb.DetectorType_CustomRegex: {}, // added dynamically via engine config, not via buildDetectorList()
|
||||
detector_typepb.DetectorType_Test: {},
|
||||
|
||||
// Deprecated — the proto field is marked deprecated=true and the service
|
||||
// no longer exists or has been superseded by a different type.
|
||||
detector_typepb.DetectorType_AirtableApiKey: {},
|
||||
detector_typepb.DetectorType_ApiScience: {},
|
||||
detector_typepb.DetectorType_Blablabus: {},
|
||||
detector_typepb.DetectorType_CoinbaseWaaS: {},
|
||||
detector_typepb.DetectorType_CoinMarketCap: {},
|
||||
detector_typepb.DetectorType_CrossBrowserTesting: {},
|
||||
detector_typepb.DetectorType_DataFire: {},
|
||||
detector_typepb.DetectorType_EtsyApiKey: {},
|
||||
detector_typepb.DetectorType_FakeJSON: {},
|
||||
detector_typepb.DetectorType_Flowdash: {},
|
||||
detector_typepb.DetectorType_Flowdock: {},
|
||||
detector_typepb.DetectorType_Fusebill: {},
|
||||
detector_typepb.DetectorType_GlitterlyAPI: {},
|
||||
detector_typepb.DetectorType_GoogleApiKey: {},
|
||||
detector_typepb.DetectorType_Happi: {},
|
||||
detector_typepb.DetectorType_Heatmapapi: {},
|
||||
detector_typepb.DetectorType_Integromat: {},
|
||||
detector_typepb.DetectorType_Ipify: {},
|
||||
detector_typepb.DetectorType_Lastfm: {},
|
||||
detector_typepb.DetectorType_Macaddress: {},
|
||||
detector_typepb.DetectorType_Nitro: {},
|
||||
detector_typepb.DetectorType_Nytimes: {},
|
||||
detector_typepb.DetectorType_OnWaterIO: {},
|
||||
detector_typepb.DetectorType_Opengraphr: {},
|
||||
detector_typepb.DetectorType_Passbase: {},
|
||||
detector_typepb.DetectorType_ProspectIO: {},
|
||||
detector_typepb.DetectorType_QuickMetrics: {},
|
||||
detector_typepb.DetectorType_Restpack: {},
|
||||
detector_typepb.DetectorType_Rockset: {},
|
||||
detector_typepb.DetectorType_ScraperSite: {},
|
||||
detector_typepb.DetectorType_Sentiment: {},
|
||||
detector_typepb.DetectorType_SportRadar: {},
|
||||
detector_typepb.DetectorType_Squareup: {},
|
||||
detector_typepb.DetectorType_Text2Data: {},
|
||||
|
||||
// Intentionally commented out in buildDetectorList() — implementation
|
||||
// exists but the detector is disabled (API issues, false positives, etc.).
|
||||
detector_typepb.DetectorType_Abstract: {},
|
||||
detector_typepb.DetectorType_AdobeIO: {},
|
||||
detector_typepb.DetectorType_Alconost: {},
|
||||
detector_typepb.DetectorType_Apollo: {},
|
||||
detector_typepb.DetectorType_AzureFunctionKey: {},
|
||||
detector_typepb.DetectorType_Besnappy: {},
|
||||
detector_typepb.DetectorType_BlockNative: {},
|
||||
detector_typepb.DetectorType_DailyCO: {},
|
||||
detector_typepb.DetectorType_Debounce: {},
|
||||
detector_typepb.DetectorType_Generic: {},
|
||||
detector_typepb.DetectorType_GetEmail: {},
|
||||
detector_typepb.DetectorType_GetEmails: {},
|
||||
detector_typepb.DetectorType_Hive: {},
|
||||
detector_typepb.DetectorType_IbmCloudUserKey: {},
|
||||
detector_typepb.DetectorType_LineMessaging: {},
|
||||
detector_typepb.DetectorType_M3o: {},
|
||||
detector_typepb.DetectorType_Magnetic: {},
|
||||
detector_typepb.DetectorType_Manifest: {},
|
||||
detector_typepb.DetectorType_Mixpanel: {},
|
||||
detector_typepb.DetectorType_NasdaqDataLink: {},
|
||||
detector_typepb.DetectorType_Raven: {},
|
||||
detector_typepb.DetectorType_Sparkpost: {},
|
||||
detector_typepb.DetectorType_SpotifyKey: {},
|
||||
detector_typepb.DetectorType_TogglTrack: {},
|
||||
detector_typepb.DetectorType_WePay: {},
|
||||
detector_typepb.DetectorType_ZapierWebhook: {},
|
||||
|
||||
// Not yet implemented — proto enum entry exists but no detector has been
|
||||
// written for this service yet.
|
||||
detector_typepb.DetectorType_Aerisweather: {},
|
||||
detector_typepb.DetectorType_Aftership: {},
|
||||
detector_typepb.DetectorType_Convert: {},
|
||||
detector_typepb.DetectorType_Honey: {},
|
||||
detector_typepb.DetectorType_HubSpot: {},
|
||||
detector_typepb.DetectorType_Paymo: {},
|
||||
detector_typepb.DetectorType_Sellfy: {},
|
||||
detector_typepb.DetectorType_AirtableMetadataApiKey: {},
|
||||
detector_typepb.DetectorType_AkamaiToken: {},
|
||||
detector_typepb.DetectorType_Alphavantage: {},
|
||||
detector_typepb.DetectorType_AmazonMWS: {},
|
||||
detector_typepb.DetectorType_AMQP: {},
|
||||
detector_typepb.DetectorType_Api2Convert: {},
|
||||
detector_typepb.DetectorType_Authorize: {},
|
||||
detector_typepb.DetectorType_Avalara: {},
|
||||
detector_typepb.DetectorType_BaseApiIO: {},
|
||||
detector_typepb.DetectorType_BasisTheory: {},
|
||||
detector_typepb.DetectorType_BitGo: {},
|
||||
detector_typepb.DetectorType_Bored: {},
|
||||
detector_typepb.DetectorType_Brightlocal: {},
|
||||
detector_typepb.DetectorType_Bubble: {},
|
||||
detector_typepb.DetectorType_Checkmarket: {},
|
||||
detector_typepb.DetectorType_CircleCI: {},
|
||||
detector_typepb.DetectorType_Cloudant: {},
|
||||
detector_typepb.DetectorType_CloudsightKey: {},
|
||||
detector_typepb.DetectorType_Cloudways: {},
|
||||
detector_typepb.DetectorType_CoinGecko: {},
|
||||
detector_typepb.DetectorType_Cometchat: {},
|
||||
detector_typepb.DetectorType_ContentfulDelivery: {},
|
||||
detector_typepb.DetectorType_ContentStack: {},
|
||||
detector_typepb.DetectorType_Copyscape: {},
|
||||
detector_typepb.DetectorType_Createsend: {},
|
||||
detector_typepb.DetectorType_Cricket: {},
|
||||
detector_typepb.DetectorType_DigitalOceanSpaces: {},
|
||||
detector_typepb.DetectorType_Distribusion: {}, //nolint:misspell // proto enum name is intentionally spelled this way
|
||||
detector_typepb.DetectorType_Duda: {},
|
||||
detector_typepb.DetectorType_Duffel: {},
|
||||
detector_typepb.DetectorType_Dynadot: {},
|
||||
detector_typepb.DetectorType_Dynatrace: {},
|
||||
detector_typepb.DetectorType_Edusign: {},
|
||||
detector_typepb.DetectorType_ElasticPath: {},
|
||||
detector_typepb.DetectorType_Emailoctopus: {},
|
||||
detector_typepb.DetectorType_EquinixOauth: {},
|
||||
detector_typepb.DetectorType_Eversign: {},
|
||||
detector_typepb.DetectorType_Fastspring: {},
|
||||
detector_typepb.DetectorType_Feedly: {},
|
||||
detector_typepb.DetectorType_Filestack: {},
|
||||
detector_typepb.DetectorType_Firebase: {},
|
||||
detector_typepb.DetectorType_FirebaseCloudMessaging: {},
|
||||
detector_typepb.DetectorType_FlagsmithEnvironmentKey: {},
|
||||
detector_typepb.DetectorType_FlagsmithToken: {},
|
||||
detector_typepb.DetectorType_Formstack: {},
|
||||
detector_typepb.DetectorType_Fountain: {},
|
||||
detector_typepb.DetectorType_FullContact: {},
|
||||
detector_typepb.DetectorType_GitHubOld: {},
|
||||
detector_typepb.DetectorType_Goshippo: {},
|
||||
detector_typepb.DetectorType_Gosquared: {},
|
||||
detector_typepb.DetectorType_Hotwire: {},
|
||||
detector_typepb.DetectorType_HubSpotOauth: {},
|
||||
detector_typepb.DetectorType_HypeAuditor: {},
|
||||
detector_typepb.DetectorType_Image4: {},
|
||||
detector_typepb.DetectorType_ImageToText: {},
|
||||
detector_typepb.DetectorType_Imgix: {},
|
||||
detector_typepb.DetectorType_Imgur: {},
|
||||
detector_typepb.DetectorType_Infobip: {},
|
||||
detector_typepb.DetectorType_JSONbin: {},
|
||||
detector_typepb.DetectorType_Jumpseller: {},
|
||||
detector_typepb.DetectorType_Kairos: {},
|
||||
detector_typepb.DetectorType_KakaoTalk: {},
|
||||
detector_typepb.DetectorType_Kaleyra: {},
|
||||
detector_typepb.DetectorType_KalturaAppToken: {},
|
||||
detector_typepb.DetectorType_KalturaSession: {},
|
||||
detector_typepb.DetectorType_Keygen: {},
|
||||
detector_typepb.DetectorType_KiteConnect: {},
|
||||
detector_typepb.DetectorType_KubeConfig: {},
|
||||
detector_typepb.DetectorType_LinkedIn: {},
|
||||
detector_typepb.DetectorType_Linode: {},
|
||||
detector_typepb.DetectorType_Messari: {},
|
||||
detector_typepb.DetectorType_Midise: {},
|
||||
detector_typepb.DetectorType_Mixcloud: {},
|
||||
detector_typepb.DetectorType_Mojohelpdesk: {},
|
||||
detector_typepb.DetectorType_MollieAccessToken: {},
|
||||
detector_typepb.DetectorType_MollieAPIKey: {},
|
||||
detector_typepb.DetectorType_Myexperiment: {},
|
||||
detector_typepb.DetectorType_NetCore: {},
|
||||
detector_typepb.DetectorType_NiceHash: {},
|
||||
detector_typepb.DetectorType_Nordigen: {},
|
||||
detector_typepb.DetectorType_Nubela: {},
|
||||
detector_typepb.DetectorType_OcrSpace: {},
|
||||
detector_typepb.DetectorType_Onbuka: {},
|
||||
detector_typepb.DetectorType_Opendatasoft: {},
|
||||
detector_typepb.DetectorType_Optidash: {},
|
||||
detector_typepb.DetectorType_Paddle: {},
|
||||
detector_typepb.DetectorType_Page2Images: {},
|
||||
detector_typepb.DetectorType_Papyrs: {},
|
||||
detector_typepb.DetectorType_PDFmyURL: {},
|
||||
detector_typepb.DetectorType_PendoIntegrationKey: {},
|
||||
detector_typepb.DetectorType_PlaidToken: {},
|
||||
detector_typepb.DetectorType_Printfection: {},
|
||||
detector_typepb.DetectorType_Processst: {},
|
||||
detector_typepb.DetectorType_Quickbase: {},
|
||||
detector_typepb.DetectorType_ReCAPTCHA: {},
|
||||
detector_typepb.DetectorType_Redbooth: {},
|
||||
detector_typepb.DetectorType_Riotgames: {},
|
||||
detector_typepb.DetectorType_Rosette: {},
|
||||
detector_typepb.DetectorType_Samsara: {},
|
||||
detector_typepb.DetectorType_ScrapingDog: {},
|
||||
detector_typepb.DetectorType_Sendoso: {},
|
||||
detector_typepb.DetectorType_ShopeeOpenPlatform: {},
|
||||
detector_typepb.DetectorType_Simplybook: {},
|
||||
detector_typepb.DetectorType_SMSApi: {},
|
||||
detector_typepb.DetectorType_StreamChatMessaging: {},
|
||||
detector_typepb.DetectorType_Supportbee: {},
|
||||
detector_typepb.DetectorType_Surge: {},
|
||||
detector_typepb.DetectorType_Teamup: {},
|
||||
detector_typepb.DetectorType_TeamViewer: {},
|
||||
detector_typepb.DetectorType_Telesign: {},
|
||||
detector_typepb.DetectorType_TencentCloudKey: {},
|
||||
detector_typepb.DetectorType_Timekit: {},
|
||||
detector_typepb.DetectorType_Trimble: {},
|
||||
detector_typepb.DetectorType_TwitterApiSecret: {},
|
||||
detector_typepb.DetectorType_UberServerToken: {},
|
||||
detector_typepb.DetectorType_Uproc: {},
|
||||
detector_typepb.DetectorType_Veevavault: {},
|
||||
detector_typepb.DetectorType_Vonage: {},
|
||||
detector_typepb.DetectorType_Wakatime: {},
|
||||
detector_typepb.DetectorType_Webengage: {},
|
||||
detector_typepb.DetectorType_WeChatAppKey: {},
|
||||
detector_typepb.DetectorType_Woopra: {},
|
||||
detector_typepb.DetectorType_WordsApi: {},
|
||||
detector_typepb.DetectorType_Workday: {},
|
||||
detector_typepb.DetectorType_WpEngine: {},
|
||||
detector_typepb.DetectorType_Yext: {},
|
||||
detector_typepb.DetectorType_AzureActiveDirectoryApplicationSecret: {},
|
||||
detector_typepb.DetectorType_AzureCacheForRedisAccessKey: {},
|
||||
detector_typepb.DetectorType_AzureManagementCertificate: {},
|
||||
detector_typepb.DetectorType_AzureMLWebServiceClassicIdentifiableKey: {},
|
||||
detector_typepb.DetectorType_AzureSQL: {},
|
||||
detector_typepb.DetectorType_BuiltWith: {},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user