From 809d442db59fec9ca32351dae43e5e7b1b72dc36 Mon Sep 17 00:00:00 2001 From: Sivan Guetta Date: Thu, 7 Apr 2022 21:34:20 +0300 Subject: [PATCH 1/5] Add Kql validation tests for normalization parsers functions --- .../CustomTables/ASimDnsActivityLogs.json | 293 ++++++++ .../CustomTables/AWSVPCFlow.json | 133 ++++ .../AzureNetworkAnalytics_CL.json | 672 ++++++++++++++++++ .../CustomTables/Corelight_CL.json | 53 ++ .../CustomTables/GCP_DNS_CL.json | 2 +- .../CustomTables/NXLog_DNS_Server_CL.json | 277 ++++++++ .../CustomTables/SquidProxy_CL.json | 113 +++ ...rsersCustomJsonDirectoryFunctionsLoader.cs | 111 +++ .../FunctionSchemasLoaders/ParsersDatabase.cs | 40 ++ .../KqlvalidationsTests/KqlValidationTests.cs | 356 +++++----- .../Kqlvalidations.Tests.csproj | 2 +- ...t.Azure.Sentinel.KustoServices.4.0.0.nupkg | Bin 116001 -> 0 bytes .../ParsersYamlFilesLoader.cs | 16 + .../ParsersYamlFilesTestData.cs | 9 + 14 files changed, 1914 insertions(+), 163 deletions(-) create mode 100644 .script/tests/KqlvalidationsTests/CustomTables/ASimDnsActivityLogs.json create mode 100644 .script/tests/KqlvalidationsTests/CustomTables/AWSVPCFlow.json create mode 100644 .script/tests/KqlvalidationsTests/CustomTables/Corelight_CL.json create mode 100644 .script/tests/KqlvalidationsTests/CustomTables/NXLog_DNS_Server_CL.json create mode 100644 .script/tests/KqlvalidationsTests/CustomTables/SquidProxy_CL.json create mode 100644 .script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs create mode 100644 .script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersDatabase.cs delete mode 100644 .script/tests/KqlvalidationsTests/Microsoft.Azure.Sentinel.KustoServices.4.0.0.nupkg create mode 100644 .script/tests/KqlvalidationsTests/YamlFilesTestData/ParsersYamlFilesLoader.cs create mode 100644 .script/tests/KqlvalidationsTests/YamlFilesTestData/ParsersYamlFilesTestData.cs diff --git a/.script/tests/KqlvalidationsTests/CustomTables/ASimDnsActivityLogs.json b/.script/tests/KqlvalidationsTests/CustomTables/ASimDnsActivityLogs.json new file mode 100644 index 0000000000..c332221fbf --- /dev/null +++ b/.script/tests/KqlvalidationsTests/CustomTables/ASimDnsActivityLogs.json @@ -0,0 +1,293 @@ +{ + "Name": "ASimDnsActivityLogs", + "Properties": [ + { + "Name": "TenantId", + "Type": "String" + }, + { + "Name": "TimeGenerated", + "Type": "DateTime" + }, + { + "Name": "EventCount", + "Type": "Int32" + }, + { + "Name": "EventType", + "Type": "String" + }, + { + "Name": "EventSubType", + "Type": "String" + }, + { + "Name": "EventResult", + "Type": "String" + }, + { + "Name": "EventResultDetails", + "Type": "String" + }, + { + "Name": "EventOriginalType", + "Type": "String" + }, + { + "Name": "EventProduct", + "Type": "String" + }, + { + "Name": "EventVendor", + "Type": "String" + }, + { + "Name": "DvcIpAddr", + "Type": "String" + }, + { + "Name": "DvcHostname", + "Type": "String" + }, + { + "Name": "DvcDomain", + "Type": "String" + }, + { + "Name": "DvcDomainType", + "Type": "String" + }, + { + "Name": "DvcOs", + "Type": "String" + }, + { + "Name": "DvcOsVersion", + "Type": "String" + }, + { + "Name": "AdditionalFields", + "Type": "Object" + }, + { + "Name": "SrcIpAddr", + "Type": "String" + }, + { + "Name": "SrcPortNumber", + "Type": "Int32" + }, + { + "Name": "DstIpAddr", + "Type": "String" + }, + { + "Name": "DnsQuery", + "Type": "String" + }, + { + "Name": "DnsQueryType", + "Type": "Int32" + }, + { + "Name": "DnsQueryTypeName", + "Type": "String" + }, + { + "Name": "DnsResponseCode", + "Type": "Int32" + }, + { + "Name": "TransactionIdHex", + "Type": "String" + }, + { + "Name": "NetworkProtocol", + "Type": "String" + }, + { + "Name": "DnsQueryClass", + "Type": "Int32" + }, + { + "Name": "DnsQueryClassName", + "Type": "String" + }, + { + "Name": "DnsNetworkDuration", + "Type": "Int32" + }, + { + "Name": "DnsFlagsAuthenticated", + "Type": "SByte" + }, + { + "Name": "DnsFlagsAuthoritative", + "Type": "SByte" + }, + { + "Name": "DnsFlagsRecursionDesired", + "Type": "SByte" + }, + { + "Name": "DnsSessionId", + "Type": "String" + }, + { + "Name": "EventMessage", + "Type": "String" + }, + { + "Name": "EventOriginalUid", + "Type": "String" + }, + { + "Name": "EventReportUrl", + "Type": "String" + }, + { + "Name": "DvcFQDN", + "Type": "String" + }, + { + "Name": "DvcId", + "Type": "String" + }, + { + "Name": "DvcIdType", + "Type": "String" + }, + { + "Name": "SrcHostname", + "Type": "String" + }, + { + "Name": "SrcDomain", + "Type": "String" + }, + { + "Name": "SrcDomainType", + "Type": "String" + }, + { + "Name": "SrcFQDN", + "Type": "String" + }, + { + "Name": "SrcDvcId", + "Type": "String" + }, + { + "Name": "SrcDvcIdType", + "Type": "String" + }, + { + "Name": "SrcDeviceType", + "Type": "String" + }, + { + "Name": "SrcUserId", + "Type": "String" + }, + { + "Name": "SrcUserIdType", + "Type": "String" + }, + { + "Name": "SrcUsername", + "Type": "String" + }, + { + "Name": "SrcUsernameType", + "Type": "String" + }, + { + "Name": "SrcUserType", + "Type": "String" + }, + { + "Name": "SrcOriginalUserType", + "Type": "String" + }, + { + "Name": "SrcProcessName", + "Type": "String" + }, + { + "Name": "SrcProcessId", + "Type": "String" + }, + { + "Name": "SrcProcessGuid", + "Type": "String" + }, + { + "Name": "DstPortNumber", + "Type": "Int32" + }, + { + "Name": "DstHostname", + "Type": "String" + }, + { + "Name": "DstDomain", + "Type": "String" + }, + { + "Name": "DstDomainType", + "Type": "String" + }, + { + "Name": "DstFQDN", + "Type": "String" + }, + { + "Name": "DstDvcId", + "Type": "String" + }, + { + "Name": "DstDvcIdType", + "Type": "String" + }, + { + "Name": "DstDeviceType", + "Type": "String" + }, + { + "Name": "UrlCategory", + "Type": "String" + }, + { + "Name": "ThreatCategory", + "Type": "String" + }, + { + "Name": "DvcAction", + "Type": "String" + }, + { + "Name": "DnsFlagsCheckingDisabled", + "Type": "SByte" + }, + { + "Name": "DnsFlagsRecursionAvailable", + "Type": "SByte" + }, + { + "Name": "DnsFlagsTruncates", + "Type": "SByte" + }, + { + "Name": "DnsFlagsZ", + "Type": "SByte" + }, + { + "Name": "SourceSystem", + "Type": "String" + }, + { + "Name": "Type", + "Type": "String" + } + ] +} \ No newline at end of file diff --git a/.script/tests/KqlvalidationsTests/CustomTables/AWSVPCFlow.json b/.script/tests/KqlvalidationsTests/CustomTables/AWSVPCFlow.json new file mode 100644 index 0000000000..c8f9f0dc6e --- /dev/null +++ b/.script/tests/KqlvalidationsTests/CustomTables/AWSVPCFlow.json @@ -0,0 +1,133 @@ +{ + "Name": "AWSVPCFlow", + "Properties": [ + { + "Name": "TenantId", + "Type": "String" + }, + { + "Name": "TimeGenerated", + "Type": "DateTime" + }, + { + "Name": "Version", + "Type": "Int" + }, + { + "Name": "AccountId", + "Type": "String" + }, + { + "Name": "InterfaceId", + "Type": "String" + }, + { + "Name": "SrcAddr", + "Type": "String" + }, + { + "Name": "DstAddr", + "Type": "String" + }, + { + "Name": "SrcPort", + "Type": "Int" + }, + { + "Name": "DstPort", + "Type": "Int" + }, + { + "Name": "Protocol", + "Type": "Int" + }, + { + "Name": "Packets", + "Type": "Int" + }, + { + "Name": "Bytes", + "Type": "Long" + }, + { + "Name": "End", + "Type": "DateTime" + }, + { + "Name": "Action", + "Type": "String" + }, + { + "Name": "LogStatus", + "Type": "String" + }, + { + "Name": "VpcId", + "Type": "String" + }, + { + "Name": "SubnetId", + "Type": "String" + }, + { + "Name": "InstanceId", + "Type": "String" + }, + { + "Name": "TcpFlags", + "Type": "Int" + }, + { + "Name": "TrafficType", + "Type": "String" + }, + { + "Name": "PktSrcAddr", + "Type": "String" + }, + { + "Name": "PktDstAddr", + "Type": "String" + }, + { + "Name": "Region", + "Type": "String" + }, + { + "Name": "AzId", + "Type": "String" + }, + { + "Name": "SublocationType", + "Type": "String" + }, + { + "Name": "SublocationId", + "Type": "String" + }, + { + "Name": "PktSrcAwsService", + "Type": "String" + }, + { + "Name": "PktDstAwsService", + "Type": "String" + }, + { + "Name": "FlowDirection", + "Type": "String" + }, + { + "Name": "TrafficPath", + "Type": "String" + }, + { + "Name": "SourceSystem", + "Type": "String" + }, + { + "Name": "Type", + "Type": "String" + } + ] +} \ No newline at end of file diff --git a/.script/tests/KqlvalidationsTests/CustomTables/AzureNetworkAnalytics_CL.json b/.script/tests/KqlvalidationsTests/CustomTables/AzureNetworkAnalytics_CL.json index df7fa4c2db..76d47773ba 100644 --- a/.script/tests/KqlvalidationsTests/CustomTables/AzureNetworkAnalytics_CL.json +++ b/.script/tests/KqlvalidationsTests/CustomTables/AzureNetworkAnalytics_CL.json @@ -44,6 +44,678 @@ { "Name": "DestPort_d", "Type": "Double" + }, + { + "Name": "SourceSystem", + "Type": "String" + }, + { + "Name": "MG", + "Type": "String" + }, + { + "Name": "ManagementGroupName", + "Type": "String" + }, + { + "Name": "RawData", + "Type": "String" + }, + { + "Name": "FlowEndTime_s", + "Type": "String" + }, + { + "Name": "FlowStartTime_s", + "Type": "String" + }, + { + "Name": "Subscription2_s", + "Type": "String" + }, + { + "Name": "Subscription1_s", + "Type": "String" + }, + { + "Name": "FASchemaVersion_s", + "Type": "String" + }, + { + "Name": "FlowIntervalStartTime_t", + "Type": "DateTime" + }, + { + "Name": "FlowIntervalEndTime_t", + "Type": "DateTime" + }, + { + "Name": "FlowStartTime_t", + "Type": "DateTime" + }, + { + "Name": "FlowEndTime_t", + "Type": "DateTime" + }, + { + "Name": "NetworkFlowType_s", + "Type": "String" + }, + { + "Name": "SrcIP_s", + "Type": "String" + }, + { + "Name": "DestIP_s", + "Type": "String" + }, + { + "Name": "VMIP_s", + "Type": "String" + }, + { + "Name": "DestPort_d", + "Type": "Double" + }, + { + "Name": "L4Protocol_s", + "Type": "String" + }, + { + "Name": "IsFlowCapturedAtUDRHop_b", + "Type": "SByte" + }, + { + "Name": "NSGList_s", + "Type": "String" + }, + { + "Name": "NSGRules_s", + "Type": "String" + }, + { + "Name": "NSGRule_s", + "Type": "String" + }, + { + "Name": "NSGRuleType_s", + "Type": "String" + }, + { + "Name": "Subscription1_g", + "Type": "String" + }, + { + "Name": "Subscription2_g", + "Type": "String" + }, + { + "Name": "Region1_s", + "Type": "String" + }, + { + "Name": "Region2_s", + "Type": "String" + }, + { + "Name": "NIC_s", + "Type": "String" + }, + { + "Name": "NIC1_s", + "Type": "String" + }, + { + "Name": "NIC2_s", + "Type": "String" + }, + { + "Name": "VM_s", + "Type": "String" + }, + { + "Name": "VM1_s", + "Type": "String" + }, + { + "Name": "VM2_s", + "Type": "String" + }, + { + "Name": "Subnet_s", + "Type": "String" + }, + { + "Name": "Routes_s", + "Type": "String" + }, + { + "Name": "ApplicationGateway1_s", + "Type": "String" + }, + { + "Name": "ApplicationGateway2_s", + "Type": "String" + }, + { + "Name": "LoadBalancer1_s", + "Type": "String" + }, + { + "Name": "LoadBalancer2_s", + "Type": "String" + }, + { + "Name": "LocalNetworkGateway1_s", + "Type": "String" + }, + { + "Name": "LocalNetworkGateway2_s", + "Type": "String" + }, + { + "Name": "ExpressRouteCircuit1_s", + "Type": "String" + }, + { + "Name": "ExpressRouteCircuit2_s", + "Type": "String" + }, + { + "Name": "ExpressRouteCircuitPeeringType_s", + "Type": "String" + }, + { + "Name": "ConnectionName_s", + "Type": "String" + }, + { + "Name": "ConnectingVNets_s", + "Type": "String" + }, + { + "Name": "Country_s", + "Type": "String" + }, + { + "Name": "AzureRegion_s", + "Type": "String" + }, + { + "Name": "AllowedInFlows_d", + "Type": "Double" + }, + { + "Name": "DeniedInFlows_d", + "Type": "Double" + }, + { + "Name": "AllowedOutFlows_d", + "Type": "Double" + }, + { + "Name": "DeniedOutFlows_d", + "Type": "Double" + }, + { + "Name": "FlowCount_d", + "Type": "Double" + }, + { + "Name": "InboundPackets_d", + "Type": "Double" + }, + { + "Name": "OutboundPackets_d", + "Type": "Double" + }, + { + "Name": "InboundBytes_d", + "Type": "Double" + }, + { + "Name": "OutboundBytes_d", + "Type": "Double" + }, + { + "Name": "CompletedFlows_d", + "Type": "Double" + }, + { + "Name": "batchSizeInBytes_d", + "Type": "Double" + }, + { + "Name": "Priority_d", + "Type": "Double" + }, + { + "Name": "Tags_s", + "Type": "String" + }, + { + "Name": "VmssName_s", + "Type": "String" + }, + { + "Name": "AddressPrefixes_s", + "Type": "String" + }, + { + "Name": "RouteTable_s", + "Type": "String" + }, + { + "Name": "AddressPrefix_s", + "Type": "String" + }, + { + "Name": "NextHopIP_s", + "Type": "String" + }, + { + "Name": "NextHopType_s", + "Type": "String" + }, + { + "Name": "FlowLogStorageAccount_s", + "Type": "String" + }, + { + "Name": "IsFlowEnabled_b", + "Type": "SByte" + }, + { + "Name": "Access_s", + "Type": "String" + }, + { + "Name": "Description_s", + "Type": "String" + }, + { + "Name": "DestinationAddressPrefix_s", + "Type": "String" + }, + { + "Name": "DestinationPortRange_s", + "Type": "String" + }, + { + "Name": "Direction_s", + "Type": "String" + }, + { + "Name": "RuleType_s", + "Type": "String" + }, + { + "Name": "SourceAddressPrefix_s", + "Type": "String" + }, + { + "Name": "SourcePortRange_s", + "Type": "String" + }, + { + "Name": "ApplicationGatewayBackendPools_s", + "Type": "String" + }, + { + "Name": "EnableIPForwarding_b", + "Type": "SByte" + }, + { + "Name": "LoadBalancerBackendPools_s", + "Type": "String" + }, + { + "Name": "MACAddress_s", + "Type": "String" + }, + { + "Name": "NSG_s", + "Type": "String" + }, + { + "Name": "PrivateIPAddresses_s", + "Type": "String" + }, + { + "Name": "PublicIPAddresses_s", + "Type": "String" + }, + { + "Name": "Subnetwork_s", + "Type": "String" + }, + { + "Name": "VirtualMachine_s", + "Type": "String" + }, + { + "Name": "IsVirtualAppliance_b", + "Type": "SByte" + }, + { + "Name": "IPAddress", + "Type": "String" + }, + { + "Name": "SubnetPrefixes_s", + "Type": "String" + }, + { + "Name": "BGPEnabled_b", + "Type": "SByte" + }, + { + "Name": "GatewayType_s", + "Type": "String" + }, + { + "Name": "SKU_s", + "Type": "String" + }, + { + "Name": "VIPAddress_s", + "Type": "String" + }, + { + "Name": "VirtualSubnetwork_s", + "Type": "String" + }, + { + "Name": "VpnClientAddressPrefixes_s", + "Type": "String" + }, + { + "Name": "ConnectionStatus_s", + "Type": "String" + }, + { + "Name": "ConnectionType_s", + "Type": "String" + }, + { + "Name": "EgressBytesTransferred_d", + "Type": "Double" + }, + { + "Name": "GatewayConnectionType_s", + "Type": "String" + }, + { + "Name": "IngressBytesTransferred_d", + "Type": "Double" + }, + { + "Name": "LocalNetworkGateway_s", + "Type": "String" + }, + { + "Name": "Peer_s", + "Type": "String" + }, + { + "Name": "RoutingWeight_d", + "Type": "Double" + }, + { + "Name": "VirtualNetworkGateway1_s", + "Type": "String" + }, + { + "Name": "VirtualNetworkGateway2_s", + "Type": "String" + }, + { + "Name": "AllowForwardedTraffic_b", + "Type": "SByte" + }, + { + "Name": "AllowGatewayTransit_b", + "Type": "SByte" + }, + { + "Name": "AllowVirtualNetworkAccess_b", + "Type": "SByte" + }, + { + "Name": "UseRemoteGateways_b", + "Type": "SByte" + }, + { + "Name": "VirtualNetwork1_s", + "Type": "String" + }, + { + "Name": "VirtualNetwork2_s", + "Type": "String" + }, + { + "Name": "AppGatewayType_s", + "Type": "String" + }, + { + "Name": "GatewaySubnet_s", + "Type": "String" + }, + { + "Name": "PrivateFrontendIPs_s", + "Type": "String" + }, + { + "Name": "PublicFrontendIPs_s", + "Type": "String" + }, + { + "Name": "BackendSubnets_s", + "Type": "String" + }, + { + "Name": "FrontendIPs_s", + "Type": "String" + }, + { + "Name": "FrontendSubnet_s", + "Type": "String" + }, + { + "Name": "FrontendSubnets_s", + "Type": "String" + }, + { + "Name": "LoadBalancerType_s", + "Type": "String" + }, + { + "Name": "Subnet1_s", + "Type": "String" + }, + { + "Name": "Subnet2_s", + "Type": "String" + }, + { + "Name": "SubnetRegion1_s", + "Type": "String" + }, + { + "Name": "SubnetRegion2_s", + "Type": "String" + }, + { + "Name": "VirtualAppliances_s", + "Type": "String" + }, + { + "Name": "BackendIPAddress_s", + "Type": "String" + }, + { + "Name": "BackendAddressPool_s", + "Type": "String" + }, + { + "Name": "BackendPort_d", + "Type": "Double" + }, + { + "Name": "FloatingIPEnabled_b", + "Type": "SByte" + }, + { + "Name": "FrontendIPAddress_s", + "Type": "String" + }, + { + "Name": "FrontendPort_d", + "Type": "Double" + }, + { + "Name": "Protocol_s", + "Type": "String" + }, + { + "Name": "CircuitProvisioningState_s", + "Type": "String" + }, + { + "Name": "ServiceProviderProperties_s", + "Type": "String" + }, + { + "Name": "ServiceProviderProvisioningState_s", + "Type": "String" + }, + { + "Name": "SkuDetail_s", + "Type": "String" + }, + { + "Name": "AzureASN_d", + "Type": "Double" + }, + { + "Name": "PeerASN_d", + "Type": "Double" + }, + { + "Name": "PeeringType_s", + "Type": "String" + }, + { + "Name": "PrimaryAzurePort_s", + "Type": "String" + }, + { + "Name": "PrimaryPeerAddressPrefix_s", + "Type": "String" + }, + { + "Name": "PrimarybytesIn_d", + "Type": "Double" + }, + { + "Name": "PrimarybytesOut_d", + "Type": "Double" + }, + { + "Name": "SecondaryAzurePort_s", + "Type": "String" + }, + { + "Name": "SecondaryPeerAddressPrefix_s", + "Type": "String" + }, + { + "Name": "SecondarybytesIn_d", + "Type": "Double" + }, + { + "Name": "SecondarybytesOut_d", + "Type": "Double" + }, + { + "Name": "State_s", + "Type": "String" + }, + { + "Name": "VlanId_d", + "Type": "Double" + }, + { + "Name": "SchemaVersion_s", + "Type": "String" + }, + { + "Name": "Name_s", + "Type": "String" + }, + { + "Name": "Region_s", + "Type": "String" + }, + { + "Name": "Network_s", + "Type": "String" + }, + { + "Name": "PrimaryNextHop_s", + "Type": "String" + }, + { + "Name": "SecondaryNextHop_s", + "Type": "String" + }, + { + "Name": "Weight_d", + "Type": "Double" + }, + { + "Name": "ComponentType_s", + "Type": "String" + }, + { + "Name": "DiscoveryRegion_s", + "Type": "String" + }, + { + "Name": "ResourceType", + "Type": "String" + }, + { + "Name": "Status_s", + "Type": "String" + }, + { + "Name": "SubType_s", + "Type": "String" + }, + { + "Name": "Subscription_g", + "Type": "String" + }, + { + "Name": "SubscriptionName_s", + "Type": "String" + }, + { + "Name": "TimeProcessed_t", + "Type": "DateTime" + }, + { + "Name": "TopologyVersion_s", + "Type": "String" + }, + { + "Name": "Type", + "Type": "String" + }, + { + "Name": "_ResourceId", + "Type": "String" } ] } diff --git a/.script/tests/KqlvalidationsTests/CustomTables/Corelight_CL.json b/.script/tests/KqlvalidationsTests/CustomTables/Corelight_CL.json new file mode 100644 index 0000000000..1f2c1d07d2 --- /dev/null +++ b/.script/tests/KqlvalidationsTests/CustomTables/Corelight_CL.json @@ -0,0 +1,53 @@ +{ + "Name": "Corelight_CL", + "Properties": [ + { + "Name": "TenantId", + "Type": "String" + }, + { + "Name": "SourceSystem", + "Type": "String" + }, + { + "Name": "MG", + "Type": "String" + }, + { + "Name": "ManagementGroupName", + "Type": "String" + }, + { + "Name": "TimeGenerated", + "Type": "DateTime" + }, + { + "Name": "Computer", + "Type": "String" + }, + { + "Name": "RawData", + "Type": "String" + }, + { + "Name": "Message", + "Type": "String" + }, + { + "Name": "log_file_s", + "Type": "String" + }, + { + "Name": "hostname_s", + "Type": "String" + }, + { + "Name": "Type", + "Type": "String" + }, + { + "Name": "_ResourceId", + "Type": "String" + } + ] +} diff --git a/.script/tests/KqlvalidationsTests/CustomTables/GCP_DNS_CL.json b/.script/tests/KqlvalidationsTests/CustomTables/GCP_DNS_CL.json index a08c690546..cbc057554a 100644 --- a/.script/tests/KqlvalidationsTests/CustomTables/GCP_DNS_CL.json +++ b/.script/tests/KqlvalidationsTests/CustomTables/GCP_DNS_CL.json @@ -19,7 +19,7 @@ }, { "Name": "TimeGenerated", - "Type": "String" + "Type": "DateTime" }, { "Name": "Computer", diff --git a/.script/tests/KqlvalidationsTests/CustomTables/NXLog_DNS_Server_CL.json b/.script/tests/KqlvalidationsTests/CustomTables/NXLog_DNS_Server_CL.json new file mode 100644 index 0000000000..da85a8ba09 --- /dev/null +++ b/.script/tests/KqlvalidationsTests/CustomTables/NXLog_DNS_Server_CL.json @@ -0,0 +1,277 @@ +{ + "Name": "NXLog_DNS_Server_CL", + "Properties": [ + { + "Name": "TenantId", + "Type": "String" + }, + { + "Name": "SourceSystem", + "Type": "String" + }, + { + "Name": "MG", + "Type": "String" + }, + { + "Name": "ManagementGroupName", + "Type": "String" + }, + { + "Name": "TimeGenerated", + "Type": "DateTime" + }, + { + "Name": "Computer", + "Type": "String" + }, + { + "Name": "RawData", + "Type": "String" + }, + { + "Name": "DNS_LogType_s", + "Type": "String" + }, + { + "Name": "FilePath_s", + "Type": "String" + }, + { + "Name": "DNSSeverType_s", + "Type": "String" + }, + { + "Name": "SourceName_s", + "Type": "String" + }, + { + "Name": "ProviderGuid_g", + "Type": "String" + }, + { + "Name": "EventID_d", + "Type": "Double" + }, + { + "Name": "Version_d", + "Type": "Double" + }, + { + "Name": "ChannelID_d", + "Type": "Double" + }, + { + "Name": "OpcodeValue_d", + "Type": "Double" + }, + { + "Name": "TaskValue_d", + "Type": "Double" + }, + { + "Name": "Keywords_s", + "Type": "String" + }, + { + "Name": "EventTime_t", + "Type": "DateTime" + }, + { + "Name": "ExecutionProcessID_d", + "Type": "Double" + }, + { + "Name": "ExecutionThreadID_d", + "Type": "Double" + }, + { + "Name": "EventType_s", + "Type": "String" + }, + { + "Name": "SeverityValue_d", + "Type": "Double" + }, + { + "Name": "Severity_s", + "Type": "String" + }, + { + "Name": "Hostname_s", + "Type": "String" + }, + { + "Name": "Domain_s", + "Type": "String" + }, + { + "Name": "AccountName_s", + "Type": "String" + }, + { + "Name": "UserID_s", + "Type": "String" + }, + { + "Name": "AccountType_s", + "Type": "String" + }, + { + "Name": "Flags_s", + "Type": "String" + }, + { + "Name": "TCP_s", + "Type": "String" + }, + { + "Name": "Source_s", + "Type": "String" + }, + { + "Name": "InterfaceIP_s", + "Type": "String" + }, + { + "Name": "AA_s", + "Type": "String" + }, + { + "Name": "AD_s", + "Type": "String" + }, + { + "Name": "QNAME_s", + "Type": "String" + }, + { + "Name": "QTYPE_s", + "Type": "String" + }, + { + "Name": "XID_s", + "Type": "String" + }, + { + "Name": "RecursionDepth_s", + "Type": "String" + }, + { + "Name": "Port_s", + "Type": "String" + }, + { + "Name": "RecursionScope_s", + "Type": "String" + }, + { + "Name": "CacheScope_s", + "Type": "String" + }, + { + "Name": "BufferSize_s", + "Type": "String" + }, + { + "Name": "PacketData_s", + "Type": "String" + }, + { + "Name": "AdditionalInfo_s", + "Type": "String" + }, + { + "Name": "GUID_g", + "Type": "String" + }, + { + "Name": "EventReceivedTime_t", + "Type": "DateTime" + }, + { + "Name": "SourceModuleName_s", + "Type": "String" + }, + { + "Name": "SourceModuleType_s", + "Type": "String" + }, + { + "Name": "HostIP_s", + "Type": "String" + }, + { + "Name": "Destination_s", + "Type": "String" + }, + { + "Name": "RD_s", + "Type": "String" + }, + { + "Name": "QXID_s", + "Type": "String" + }, + { + "Name": "PolicyName_s", + "Type": "String" + }, + { + "Name": "DNSSEC_s", + "Type": "String" + }, + { + "Name": "RCODE_s", + "Type": "String" + }, + { + "Name": "Scope_s", + "Type": "String" + }, + { + "Name": "Zone_s", + "Type": "String" + }, + { + "Name": "ElapsedTime_s", + "Type": "String" + }, + { + "Name": "Type_s", + "Type": "String" + }, + { + "Name": "NAME_s", + "Type": "String" + }, + { + "Name": "TTL_s", + "Type": "String" + }, + { + "Name": "RDATA_s", + "Type": "String" + }, + { + "Name": "ZoneScope_s", + "Type": "String" + }, + { + "Name": "VirtualizationID_s", + "Type": "String" + }, + { + "Name": "Reason_s", + "Type": "String" + }, + { + "Name": "Type", + "Type": "String" + }, + { + "Name": "_ResourceId", + "Type": "String" + } + ] +} diff --git a/.script/tests/KqlvalidationsTests/CustomTables/SquidProxy_CL.json b/.script/tests/KqlvalidationsTests/CustomTables/SquidProxy_CL.json new file mode 100644 index 0000000000..25ae3139f8 --- /dev/null +++ b/.script/tests/KqlvalidationsTests/CustomTables/SquidProxy_CL.json @@ -0,0 +1,113 @@ +{ + "Name": "SquidProxy_CL", + "Properties": [ + { + "Name": "TenantId", + "Type": "String" + }, + { + "Name": "SourceSystem", + "Type": "String" + }, + { + "Name": "MG", + "Type": "String" + }, + { + "Name": "ManagementGroupName", + "Type": "String" + }, + { + "Name": "TimeGenerated", + "Type": "DateTime" + }, + { + "Name": "Computer", + "Type": "String" + }, + { + "Name": "RawData", + "Type": "String" + }, + { + "Name": "TenantId_s", + "Type": "String" + }, + { + "Name": "MG_s", + "Type": "String" + }, + { + "Name": "TimeGenerated_UTC__s", + "Type": "String" + }, + { + "Name": "Type_s", + "Type": "String" + }, + { + "Name": "_ResourceId_s", + "Type": "String" + }, + { + "Name": "Duration_s", + "Type": "String" + }, + { + "Name": "SrcIpAddr_s", + "Type": "String" + }, + { + "Name": "ResultCode_s", + "Type": "String" + }, + { + "Name": "StatusCode_s", + "Type": "String" + }, + { + "Name": "Bytes_s", + "Type": "String" + }, + { + "Name": "RequstMethod_s", + "Type": "String" + }, + { + "Name": "Url_s", + "Type": "String" + }, + { + "Name": "Username_s", + "Type": "String" + }, + { + "Name": "PeerStatus_s", + "Type": "String" + }, + { + "Name": "PeerHost_s", + "Type": "String" + }, + { + "Name": "ContentType_s", + "Type": "String" + }, + { + "Name": "EventTime_UTC__s", + "Type": "String" + }, + { + "Name": "Description_s", + "Type": "String" + }, + { + "Name": "Type", + "Type": "String" + }, + { + "Name": "_ResourceId", + "Type": "String" + } + ] +} diff --git a/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs b/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs new file mode 100644 index 0000000000..3ecd9943f1 --- /dev/null +++ b/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs @@ -0,0 +1,111 @@ +using Microsoft.Azure.Sentinel.KustoServices.Contract; +using Microsoft.Azure.Sentinel.KustoServices.Implementation; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using YamlDotNet.Serialization; + +namespace Kqlvalidations.Tests.FunctionSchemasLoaders +{ + public class ParsersCustomJsonDirectoryFunctionsLoader : CustomJsonDirectoryObjectsLoader, IFunctionSchemaLoader + { + public ParsersCustomJsonDirectoryFunctionsLoader(string directoryPath) : base(directoryPath) + { + } + + + public override IEnumerable Load() + { + var sampleFunctions = base.Load(); + Dictionary> schemaToResultColumnsMapping = GetSchemaToResultColumnsMapping(sampleFunctions); + var functions = GetFunctions(schemaToResultColumnsMapping); + return functions; + } + + /// + /// Currently there are 3 parser schemas: DNS, network sessions and web sessions. + /// Parser functions with the same schema, should have the same result columns. + /// CustomFunctions directory contains a sample function for each schema. + /// This function extracts the result columns from the sample function and creates a mapping between the schema and the functions result columns. + /// + /// The sample functions + /// Mapping between the schema and the functions result columns + private Dictionary> GetSchemaToResultColumnsMapping(IEnumerable sampleFunctions) + { + Dictionary sampleFunctionToSchemaMapping = ParsersDatabase.Parsers.ToDictionary(keySelector: parser => parser.SampleFunctionName, elementSelector: parser => parser.Schema); + return sampleFunctions.ToDictionary(keySelector: sampleFunction => sampleFunctionToSchemaMapping[sampleFunction.FunctionName], elementSelector: sampleFunction => sampleFunction.FunctionResultColumns); + } + + /// + /// Generates the FunctionSchema for each parser. + /// + /// Mapping between schema and its result columns + /// FunctionSchema foreach parser + private IEnumerable GetFunctions(Dictionary> schemaToResultColumnsMapping) + { + var parsersYamlFilesLoader = new ParsersYamlFilesLoader(); + var parsersYamlFiles = parsersYamlFilesLoader.GetFilesNames(); + return parsersYamlFiles.Select(fileName => + { + var schema = fileName.Split("\\")[^3]; + var resultColumns = schemaToResultColumnsMapping[schema]; + return GetParserFunctionSchema(fileName, resultColumns); + }); + } + + /// + /// Extracts the parser name and parameters from the yaml file and creates the FunctionSchema. + /// + /// The parser's yaml file + /// The parser's result columns (taken from the sample data) + /// The parser's function schema + private FunctionSchema GetParserFunctionSchema(string fileName, List resultColumns) + { + var deserializer = new DeserializerBuilder().Build(); + var yaml = deserializer.Deserialize(File.ReadAllText(fileName)); + return new FunctionSchema() + { + FunctionName = yaml["ParserName"], + FunctionParameters = GetFunctionParameters(yaml), + FunctionResultColumns = resultColumns, + }; + } + + /// + /// Extract fuction parameters from parser's ymal file + /// + /// The parser's yaml file + /// The parser's function parameters + private List GetFunctionParameters(dynamic yaml) + { + object functionParamsObject; + var functionParameters = new List(); + if (yaml.TryGetValue("ParserParams", out functionParamsObject)) + { + var parserParams = (List)functionParamsObject; + functionParameters = parserParams.Select(ConvertObjectToFunctionParameter).ToList(); + } + + return functionParameters; + } + + /// + /// Convert object to function parameter + /// + /// The function parameter as a object + /// The function parameter + private FunctionParameter ConvertObjectToFunctionParameter(object parameter) + { + var dictionary = (Dictionary)parameter; + return new FunctionParameter() + { + Name = (string)dictionary["Name"], + Type = (string)dictionary["Type"], + IsRequired = false, + }; + } + } +} diff --git a/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersDatabase.cs b/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersDatabase.cs new file mode 100644 index 0000000000..a9ff07469a --- /dev/null +++ b/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersDatabase.cs @@ -0,0 +1,40 @@ +using Microsoft.Azure.Sentinel.KustoServices.Contract; +using Microsoft.Azure.Sentinel.KustoServices.Implementation; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using YamlDotNet.Serialization; + +namespace Kqlvalidations.Tests.FunctionSchemasLoaders +{ + public static class ParsersDatabase + { + public static ParserConfiguration[] Parsers => new ParserConfiguration[] + { + new ParserConfiguration() + { + Schema= "ASimDns", + SampleFunctionName= "_Im_Dns", + }, + new ParserConfiguration() + { + Schema= "ASimWebSession", + SampleFunctionName= "_Im_WebSession", + }, + new ParserConfiguration() + { + Schema= "ASimNetworkSession", + SampleFunctionName= "_Im_NetworkSession", + }, + }; + } + + public class ParserConfiguration + { + public string Schema { get; set; } + public string SampleFunctionName { get; set; } + } +} diff --git a/.script/tests/KqlvalidationsTests/KqlValidationTests.cs b/.script/tests/KqlvalidationsTests/KqlValidationTests.cs index 2cdd844a4b..143b4711a3 100644 --- a/.script/tests/KqlvalidationsTests/KqlValidationTests.cs +++ b/.script/tests/KqlvalidationsTests/KqlValidationTests.cs @@ -1,164 +1,198 @@ -using System.Collections.Generic; -using Microsoft.Azure.Sentinel.KustoServices.Contract; -using System.IO; -using System.Linq; -using System.Text.RegularExpressions; -using Xunit; -using YamlDotNet.Serialization; +using System.Collections.Generic; +using Microsoft.Azure.Sentinel.KustoServices.Contract; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using Xunit; +using YamlDotNet.Serialization; using Microsoft.Azure.Sentinel.KustoServices.Implementation; +using Kqlvalidations.Tests.FunctionSchemasLoaders; +using System; -namespace Kqlvalidations.Tests -{ - public class KqlValidationTests - { +namespace Kqlvalidations.Tests +{ + public class KqlValidationTests + { private readonly IKqlQueryAnalyzer _queryValidator; - private const int TestFolderDepth = 3; - - public KqlValidationTests() - { - _queryValidator = new KqlQueryAnalyzerBuilder() - .WithSentinelDefaultTablesAndFunctionsSchemas() - .WithCustomTableSchemasLoader(new CustomJsonDirectoryTablesLoader(Path.Combine(Utils.GetTestDirectory(TestFolderDepth), "CustomTables"))) - .WithCustomFunctionSchemasLoader(new CustomJsonDirectoryFunctionsLoader(Path.Combine(Utils.GetTestDirectory(TestFolderDepth), "CustomFunctions"))) - .Build(); - } - - // We pass File name to test because in the result file we want to show an informative name for the test - [Theory] - [ClassData(typeof(DetectionsYamlFilesTestData))] - public void Validate_DetectionQueries_HaveValidKql(string fileName, string encodedFilePath) - { - var res = ReadAndDeserializeYaml(encodedFilePath); - var queryStr = (string) res["query"]; - var id = (string) res["id"]; - - //we ignore known issues - if (ShouldSkipTemplateValidation(id)) - { - return; - } - - ValidateKql(id, queryStr); - } - - // We pass File name to test because in the result file we want to show an informative name for the test - [Theory] - [ClassData(typeof(DetectionsYamlFilesTestData))] - public void Validate_DetectionQueries_SkippedTemplatesDoNotHaveValidKql(string fileName, string encodedFilePath) - { - var res = ReadAndDeserializeYaml(encodedFilePath); - var queryStr = (string) res["query"]; - var id = (string) res["id"]; - - //Templates that are in the skipped templates should not pass the validation (if they pass, why skip?) - if (ShouldSkipTemplateValidation(id)) - { - var validationRes = _queryValidator.ValidateSyntax(queryStr); - Assert.False(validationRes.IsValid, $"Template Id:{id} is valid but it is in the skipped validation templates. Please remove it from the templates that are skipped since it is valid."); - } - - } - - // // We pass File name to test because in the result file we want to show an informative name for the test - // [Theory] - // [ClassData(typeof(InsightsYamlFilesTestData))] - // public void Validate_InsightsQueries_HaveValidKqlBaseQuery(string fileName, string encodedFilePath) - // { - // var res = ReadAndDeserializeYaml(encodedFilePath); - // var queryStr = (string) res["BaseQuery"]; - // - // ValidateKql(fileProp.FileName, queryStr); - // } - - [Theory] - [ClassData(typeof(ExplorationQueriesYamlFilesTestData))] - public void Validate_ExplorationQueries_HaveValidKql(string fileName, string encodedFilePath) - { - var res = ReadAndDeserializeYaml(encodedFilePath); - var queryStr = (string) res["query"]; - var id = (string) res["Id"]; - - //we ignore known issues - if (ShouldSkipTemplateValidation(id)) - { - return; - } - - ValidateKql(id, queryStr); - } - - [Theory] - [ClassData(typeof(ExplorationQueriesYamlFilesTestData))] - public void Validate_ExplorationQueries_SkippedTemplatesDoNotHaveValidKql(string fileName, string encodedFilePath) - { - var res = ReadAndDeserializeYaml(encodedFilePath); - var queryStr = (string) res["query"]; - var id = (string) res["Id"]; - - //Templates that are in the skipped templates should not pass the validation (if they pass, why skip?) - if (ShouldSkipTemplateValidation(id)) - { - var validationRes = _queryValidator.ValidateSyntax(queryStr); - Assert.False(validationRes.IsValid, $"Template Id:{id} is valid but it is in the skipped validation templates. Please remove it from the templates that are skipped since it is valid."); - } - - } - - private void ValidateKql(string id, string queryStr) - { - var validationResult = _queryValidator.ValidateSyntax(queryStr); - var firstErrorLocation = (Line: 0, Col: 0); - if (!validationResult.IsValid) - { - firstErrorLocation = GetLocationInQuery(queryStr, validationResult.Diagnostics.First(d => d.Severity == "Error").Start); - } - - var listOfDiagnostics = validationResult.Diagnostics; - - bool isQueryValid = !(from p in listOfDiagnostics - where !p.Message.Contains("_GetWatchlist") //We do not validate the getWatchList, since the result schema is not known - select p).Any(); - - - Assert.True( - isQueryValid, - isQueryValid - ? string.Empty - : @$"Template Id: {id} is not valid in Line: {firstErrorLocation.Line} col: {firstErrorLocation.Col} - Errors: {validationResult.Diagnostics.Select(d => d.ToString()).ToList().Aggregate((s1, s2) => s1 + "," + s2)}"); - } - - private Dictionary ReadAndDeserializeYaml(string encodedFilePath) - { - - var yaml = File.ReadAllText(Utils.DecodeBase64(encodedFilePath)); - var deserializer = new DeserializerBuilder().Build(); - return deserializer.Deserialize(yaml); - } - private bool ShouldSkipTemplateValidation(string templateId) - { - return TemplatesToSkipValidationReader.WhiteListTemplates - .Where(template => template.id == templateId) - .Where(template => !string.IsNullOrWhiteSpace(template.validationFailReason)) - .Where(template => !string.IsNullOrWhiteSpace(template.templateName)) - .Any(); - } - - private (int Line, int Col) GetLocationInQuery(string queryStr, int pos) - { - var lines = Regex.Split(queryStr, "\n"); - var curlineIndex = 0; - var curPos = 0; - - while (lines.Length > curlineIndex && pos > curPos + lines[curlineIndex].Length + 1) - { - curPos += lines[curlineIndex].Length + 1; - curlineIndex++; - } - var col = (pos - curPos + 1); - return (curlineIndex + 1, col); - } - } - -} - + private const int TestFolderDepth = 3; + + public KqlValidationTests() + { + _queryValidator = new KqlQueryAnalyzerBuilder() + .WithSentinelDefaultTablesAndFunctionsSchemas() + .WithCustomTableSchemasLoader(new CustomJsonDirectoryTablesLoader(Path.Combine(Utils.GetTestDirectory(TestFolderDepth), "CustomTables"))) + .WithCustomFunctionSchemasLoader(new CustomJsonDirectoryFunctionsLoader(Path.Combine(Utils.GetTestDirectory(TestFolderDepth), "CustomFunctions"))) + .WithCustomFunctionSchemasLoader(new ParsersCustomJsonDirectoryFunctionsLoader(Path.Combine(Utils.GetTestDirectory(TestFolderDepth), "CustomFunctions"))) + .Build(); + } + + // We pass File name to test because in the result file we want to show an informative name for the test + [Theory] + [ClassData(typeof(DetectionsYamlFilesTestData))] + public void Validate_DetectionQueries_HaveValidKql(string fileName, string encodedFilePath) + { + var res = ReadAndDeserializeYaml(encodedFilePath); + var queryStr = (string) res["query"]; + var id = (string) res["id"]; + + //we ignore known issues + if (ShouldSkipTemplateValidation(id)) + { + return; + } + + ValidateKql(id, queryStr); + } + + // We pass File name to test because in the result file we want to show an informative name for the test + [Theory] + [ClassData(typeof(DetectionsYamlFilesTestData))] + public void Validate_DetectionQueries_SkippedTemplatesDoNotHaveValidKql(string fileName, string encodedFilePath) + { + var res = ReadAndDeserializeYaml(encodedFilePath); + var queryStr = (string) res["query"]; + var id = (string) res["id"]; + + //Templates that are in the skipped templates should not pass the validation (if they pass, why skip?) + if (ShouldSkipTemplateValidation(id)) + { + var validationRes = _queryValidator.ValidateSyntax(queryStr); + Assert.False(validationRes.IsValid, $"Template Id:{id} is valid but it is in the skipped validation templates. Please remove it from the templates that are skipped since it is valid."); + } + + } + + // // We pass File name to test because in the result file we want to show an informative name for the test + // [Theory] + // [ClassData(typeof(InsightsYamlFilesTestData))] + // public void Validate_InsightsQueries_HaveValidKqlBaseQuery(string fileName, string encodedFilePath) + // { + // var res = ReadAndDeserializeYaml(encodedFilePath); + // var queryStr = (string) res["BaseQuery"]; + // + // ValidateKql(fileProp.FileName, queryStr); + // } + + [Theory] + [ClassData(typeof(ExplorationQueriesYamlFilesTestData))] + public void Validate_ExplorationQueries_HaveValidKql(string fileName, string encodedFilePath) + { + var res = ReadAndDeserializeYaml(encodedFilePath); + var queryStr = (string) res["query"]; + var id = (string) res["Id"]; + + //we ignore known issues + if (ShouldSkipTemplateValidation(id)) + { + return; + } + + ValidateKql(id, queryStr); + } + + [Theory] + [ClassData(typeof(ExplorationQueriesYamlFilesTestData))] + public void Validate_ExplorationQueries_SkippedTemplatesDoNotHaveValidKql(string fileName, string encodedFilePath) + { + var res = ReadAndDeserializeYaml(encodedFilePath); + var queryStr = (string) res["query"]; + var id = (string) res["Id"]; + + //Templates that are in the skipped templates should not pass the validation (if they pass, why skip?) + if (ShouldSkipTemplateValidation(id)) + { + var validationRes = _queryValidator.ValidateSyntax(queryStr); + Assert.False(validationRes.IsValid, $"Template Id:{id} is valid but it is in the skipped validation templates. Please remove it from the templates that are skipped since it is valid."); + } + + } + + // We pass File name to test because in the result file we want to show an informative name for the test + [Theory] + [ClassData(typeof(ParsersYamlFilesTestData))] + public void Validate_ParsersQueries_HaveValidKql(string fileName, string encodedFilePath) + { + Dictionary yaml = ReadAndDeserializeYaml(encodedFilePath); + var queryParamsAsLetStatements = GenerateFunctionParametersAsLetStatements(yaml); + var queryStr = queryParamsAsLetStatements + (string)yaml["ParserQuery"]; + var id = (string)yaml["ParserName"]; + ValidateKql(id, queryStr); + } + + private void ValidateKql(string id, string queryStr) + { + var validationResult = _queryValidator.ValidateSyntax(queryStr); + var firstErrorLocation = (Line: 0, Col: 0); + if (!validationResult.IsValid) + { + firstErrorLocation = GetLocationInQuery(queryStr, validationResult.Diagnostics.First(d => d.Severity == "Error").Start); + } + + var listOfDiagnostics = validationResult.Diagnostics; + + bool isQueryValid = !(from p in listOfDiagnostics + where !p.Message.Contains("_GetWatchlist") //We do not validate the getWatchList, since the result schema is not known + select p).Any(); + + + Assert.True( + isQueryValid, + isQueryValid + ? string.Empty + : @$"Template Id: {id} is not valid in Line: {firstErrorLocation.Line} col: {firstErrorLocation.Col} + Errors: {validationResult.Diagnostics.Select(d => d.ToString()).ToList().Aggregate((s1, s2) => s1 + "," + s2)}"); + } + + private Dictionary ReadAndDeserializeYaml(string encodedFilePath) + { + + var yaml = File.ReadAllText(Utils.DecodeBase64(encodedFilePath)); + var deserializer = new DeserializerBuilder().Build(); + return deserializer.Deserialize(yaml); + } + private bool ShouldSkipTemplateValidation(string templateId) + { + return TemplatesToSkipValidationReader.WhiteListTemplates + .Where(template => template.id == templateId) + .Where(template => !string.IsNullOrWhiteSpace(template.validationFailReason)) + .Where(template => !string.IsNullOrWhiteSpace(template.templateName)) + .Any(); + } + + private (int Line, int Col) GetLocationInQuery(string queryStr, int pos) + { + var lines = Regex.Split(queryStr, "\n"); + var curlineIndex = 0; + var curPos = 0; + + while (lines.Length > curlineIndex && pos > curPos + lines[curlineIndex].Length + 1) + { + curPos += lines[curlineIndex].Length + 1; + curlineIndex++; + } + var col = (pos - curPos + 1); + return (curlineIndex + 1, col); + } + + private string GenerateFunctionParametersAsLetStatements(Dictionary yaml) + { + object parserParamsObject; + if (yaml.TryGetValue("ParserParams", out parserParamsObject)) + { + var parserParams = (List)parserParamsObject; + return string.Join(Environment.NewLine, parserParams.Select(GenerateParamaterAsLetStatement).ToList()); + } + return ""; + } + + private string GenerateParamaterAsLetStatement(object parameter) + { + var dictionary = (Dictionary)parameter; + string name = (string)dictionary["Name"]; + string defaultValue = (string)dictionary["Type"] == "string" ? $"'{(string)dictionary["Default"]}'" : (string)dictionary["Default"]; + return $"let {name}= {defaultValue};"; + } + } + +} + diff --git a/.script/tests/KqlvalidationsTests/Kqlvalidations.Tests.csproj b/.script/tests/KqlvalidationsTests/Kqlvalidations.Tests.csproj index 6bdbebf366..62135cde2f 100644 --- a/.script/tests/KqlvalidationsTests/Kqlvalidations.Tests.csproj +++ b/.script/tests/KqlvalidationsTests/Kqlvalidations.Tests.csproj @@ -12,7 +12,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/.script/tests/KqlvalidationsTests/Microsoft.Azure.Sentinel.KustoServices.4.0.0.nupkg b/.script/tests/KqlvalidationsTests/Microsoft.Azure.Sentinel.KustoServices.4.0.0.nupkg deleted file mode 100644 index bd19ff151bc3a7cd0bc7047a1615c9b32b9932a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116001 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%0D4A%drU`#f| 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 diff --git a/.script/tests/KqlvalidationsTests/YamlFilesTestData/ParsersYamlFilesLoader.cs b/.script/tests/KqlvalidationsTests/YamlFilesTestData/ParsersYamlFilesLoader.cs new file mode 100644 index 0000000000..3acc9afd3c --- /dev/null +++ b/.script/tests/KqlvalidationsTests/YamlFilesTestData/ParsersYamlFilesLoader.cs @@ -0,0 +1,16 @@ +using Kqlvalidations.Tests.FunctionSchemasLoaders; +using System.Collections.Generic; +using System.IO; +using System.Linq; + +namespace Kqlvalidations.Tests +{ + public class ParsersYamlFilesLoader : YamlFilesLoader + { + protected override List GetDirectoryPaths() + { + var basePath = Utils.GetTestDirectory(TestFolderDepth); + return ParsersDatabase.Parsers.Select(parser => Path.Combine(basePath, "Parsers", parser.Schema, "Parsers")).ToList(); + } + } +} \ No newline at end of file diff --git a/.script/tests/KqlvalidationsTests/YamlFilesTestData/ParsersYamlFilesTestData.cs b/.script/tests/KqlvalidationsTests/YamlFilesTestData/ParsersYamlFilesTestData.cs new file mode 100644 index 0000000000..fd89a24a52 --- /dev/null +++ b/.script/tests/KqlvalidationsTests/YamlFilesTestData/ParsersYamlFilesTestData.cs @@ -0,0 +1,9 @@ +namespace Kqlvalidations.Tests +{ + public class ParsersYamlFilesTestData : YamlFilesTestData + { + public ParsersYamlFilesTestData() : base(new ParsersYamlFilesLoader()) + { + } + } +} From 73a0d1ffb4cefc0b129c104bdace0ae5deecf677 Mon Sep 17 00:00:00 2001 From: Sivan Guetta Date: Thu, 7 Apr 2022 21:38:48 +0300 Subject: [PATCH 2/5] Add new kusto services nupkg --- .../KqlvalidationsTests/KqlValidationTests.cs | 2 +- ...ft.Azure.Sentinel.KustoServices.5.0.1.nupkg | Bin 0 -> 116847 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 .script/tests/KqlvalidationsTests/Microsoft.Azure.Sentinel.KustoServices.5.0.1.nupkg diff --git a/.script/tests/KqlvalidationsTests/KqlValidationTests.cs b/.script/tests/KqlvalidationsTests/KqlValidationTests.cs index 143b4711a3..ba1b14516f 100644 --- a/.script/tests/KqlvalidationsTests/KqlValidationTests.cs +++ b/.script/tests/KqlvalidationsTests/KqlValidationTests.cs @@ -110,7 +110,7 @@ namespace Kqlvalidations.Tests // We pass File name to test because in the result file we want to show an informative name for the test [Theory] [ClassData(typeof(ParsersYamlFilesTestData))] - public void Validate_ParsersQueries_HaveValidKql(string fileName, string encodedFilePath) + public void Validate_ParsersFunctions_HaveValidKql(string fileName, string encodedFilePath) { Dictionary yaml = ReadAndDeserializeYaml(encodedFilePath); var queryParamsAsLetStatements = GenerateFunctionParametersAsLetStatements(yaml); diff --git a/.script/tests/KqlvalidationsTests/Microsoft.Azure.Sentinel.KustoServices.5.0.1.nupkg b/.script/tests/KqlvalidationsTests/Microsoft.Azure.Sentinel.KustoServices.5.0.1.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..b634a59c54961d87a256ae6ca6f5f1ab2a2ed4cb GIT binary patch literal 116847 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

2>Ow< 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¥}}z>y9TGQ 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 pcZd;N(TZ*WdP#&ZAm}h7^~ Date: Sun, 10 Apr 2022 14:17:12 +0300 Subject: [PATCH 3/5] Add VectraStream_CL and ignore 'vimNetworkSessionMD4IoT' --- .../CustomTables/VectraStream_CL.json | 857 ++++++++++++++++++ .../KqlvalidationsTests/KqlValidationTests.cs | 13 +- .../SkipValidationsTemplates.json | 5 + .../vimNetworkSessionMicrosoftMD4IoT.yaml | 1 + 4 files changed, 874 insertions(+), 2 deletions(-) create mode 100644 .script/tests/KqlvalidationsTests/CustomTables/VectraStream_CL.json diff --git a/.script/tests/KqlvalidationsTests/CustomTables/VectraStream_CL.json b/.script/tests/KqlvalidationsTests/CustomTables/VectraStream_CL.json new file mode 100644 index 0000000000..90bfbe061f --- /dev/null +++ b/.script/tests/KqlvalidationsTests/CustomTables/VectraStream_CL.json @@ -0,0 +1,857 @@ +{ + "Name": "VectraStream_CL", + "Properties": [ + { + "Name": "TenantId", + "Type": "String" + }, + { + "Name": "SourceSystem", + "Type": "String" + }, + { + "Name": "MG", + "Type": "String" + }, + { + "Name": "ManagementGroupName", + "Type": "String" + }, + { + "Name": "TimeGenerated", + "Type": "DateTime" + }, + { + "Name": "Computer", + "Type": "String" + }, + { + "Name": "RawData", + "Type": "String" + }, + { + "Name": "client_dig_product_id_s", + "Type": "String" + }, + { + "Name": "client_dig_protocol_id_s", + "Type": "String" + }, + { + "Name": "client_name_s", + "Type": "String" + }, + { + "Name": "dir_confidence_d", + "Type": "Double" + }, + { + "Name": "san_ip_s", + "Type": "String" + }, + { + "Name": "host_key_s", + "Type": "String" + }, + { + "Name": "application_s", + "Type": "String" + }, + { + "Name": "error_msg_s", + "Type": "String" + }, + { + "Name": "reply_to_s", + "Type": "String" + }, + { + "Name": "useragent_s", + "Type": "String" + }, + { + "Name": "second_received_s", + "Type": "String" + }, + { + "Name": "spf_mailfrom_s", + "Type": "String" + }, + { + "Name": "x_originating_ip_s", + "Type": "String" + }, + { + "Name": "first_received_s", + "Type": "String" + }, + { + "Name": "in_reply_to_s", + "Type": "String" + }, + { + "Name": "rcpt_to_s", + "Type": "String" + }, + { + "Name": "to_s", + "Type": "String" + }, + { + "Name": "date_s", + "Type": "String" + }, + { + "Name": "from_s", + "Type": "String" + }, + { + "Name": "helo_s", + "Type": "String" + }, + { + "Name": "mail_from_s", + "Type": "String" + }, + { + "Name": "msgid_s", + "Type": "String" + }, + { + "Name": "tls_b", + "Type": "SByte" + }, + { + "Name": "proxied_s", + "Type": "String" + }, + { + "Name": "error_s", + "Type": "String" + }, + { + "Name": "matched_dn_s", + "Type": "String" + }, + { + "Name": "referrer_s", + "Type": "String" + }, + { + "Name": "client_build_s", + "Type": "String" + }, + { + "Name": "desktop_height_d", + "Type": "Double" + }, + { + "Name": "desktop_width_d", + "Type": "Double" + }, + { + "Name": "keyboard_layout_s", + "Type": "String" + }, + { + "Name": "beacon_type_s", + "Type": "String" + }, + { + "Name": "beacon_uid_s", + "Type": "String" + }, + { + "Name": "first_event_time_d", + "Type": "Double" + }, + { + "Name": "last_event_time_d", + "Type": "Double" + }, + { + "Name": "orig_ip_bytes_d", + "Type": "Double" + }, + { + "Name": "resp_domains_s", + "Type": "String" + }, + { + "Name": "resp_ip_bytes_d", + "Type": "Double" + }, + { + "Name": "session_count_d", + "Type": "Double" + }, + { + "Name": "resp_filename_s", + "Type": "String" + }, + { + "Name": "response_content_disposition_s", + "Type": "String" + }, + { + "Name": "cookie_s", + "Type": "String" + }, + { + "Name": "cookie_vars_s", + "Type": "String" + }, + { + "Name": "orig_mime_types_s", + "Type": "String" + }, + { + "Name": "domain_s", + "Type": "String" + }, + { + "Name": "status_d", + "Type": "Double" + }, + { + "Name": "username_s", + "Type": "String" + }, + { + "Name": "cipher_alg_s", + "Type": "String" + }, + { + "Name": "compression_alg_s", + "Type": "String" + }, + { + "Name": "hassh_g", + "Type": "String" + }, + { + "Name": "hasshServer_g", + "Type": "String" + }, + { + "Name": "host_key_alg_s", + "Type": "String" + }, + { + "Name": "kex_alg_s", + "Type": "String" + }, + { + "Name": "mac_alg_s", + "Type": "String" + }, + { + "Name": "server_s", + "Type": "String" + }, + { + "Name": "client_s", + "Type": "String" + }, + { + "Name": "data_source_s", + "Type": "String" + }, + { + "Name": "error_code_s", + "Type": "String" + }, + { + "Name": "orig_host_observed_privilege_d", + "Type": "Double" + }, + { + "Name": "protocol_d", + "Type": "Double" + }, + { + "Name": "rep_cipher_s", + "Type": "String" + }, + { + "Name": "reply_timestamp_d", + "Type": "Double" + }, + { + "Name": "req_ciphers_s", + "Type": "String" + }, + { + "Name": "request_type_s", + "Type": "String" + }, + { + "Name": "success_b", + "Type": "SByte" + }, + { + "Name": "attributes_s", + "Type": "String" + }, + { + "Name": "bind_error_count_d", + "Type": "Double" + }, + { + "Name": "encrypted_sasl_payload_count_d", + "Type": "Double" + }, + { + "Name": "is_close_b", + "Type": "SByte" + }, + { + "Name": "is_query_b", + "Type": "SByte" + }, + { + "Name": "logon_failure_error_count_d", + "Type": "Double" + }, + { + "Name": "message_id_d", + "Type": "Double" + }, + { + "Name": "query_scope_s", + "Type": "String" + }, + { + "Name": "request_bytes_s", + "Type": "String" + }, + { + "Name": "response_bytes_s", + "Type": "String" + }, + { + "Name": "result_s", + "Type": "String" + }, + { + "Name": "result_code_s", + "Type": "String" + }, + { + "Name": "result_count_d", + "Type": "Double" + }, + { + "Name": "base_object_s", + "Type": "String" + }, + { + "Name": "endpoint_s", + "Type": "String" + }, + { + "Name": "operation_s", + "Type": "String" + }, + { + "Name": "rtt_d", + "Type": "Double" + }, + { + "Name": "action_s", + "Type": "String" + }, + { + "Name": "delete_on_close_b", + "Type": "SByte" + }, + { + "Name": "name_s", + "Type": "String" + }, + { + "Name": "hostname_s", + "Type": "String" + }, + { + "Name": "client_issuer_s", + "Type": "String" + }, + { + "Name": "client_subject_s", + "Type": "String" + }, + { + "Name": "certificate_serial_g", + "Type": "String" + }, + { + "Name": "resp_mime_types_s", + "Type": "String" + }, + { + "Name": "response_cache_control_s", + "Type": "String" + }, + { + "Name": "lease_time_d", + "Type": "Double" + }, + { + "Name": "mac_s", + "Type": "String" + }, + { + "Name": "assigned_ip_s", + "Type": "String" + }, + { + "Name": "dhcp_server_ip_s", + "Type": "String" + }, + { + "Name": "dns_server_ips_s", + "Type": "String" + }, + { + "Name": "request_cache_control_s", + "Type": "String" + }, + { + "Name": "response_expires_s", + "Type": "String" + }, + { + "Name": "user_agent_s", + "Type": "String" + }, + { + "Name": "path_s", + "Type": "String" + }, + { + "Name": "host_s", + "Type": "String" + }, + { + "Name": "host_multihomed_b", + "Type": "SByte" + }, + { + "Name": "is_proxied_b", + "Type": "SByte" + }, + { + "Name": "method_s", + "Type": "String" + }, + { + "Name": "request_body_len_d", + "Type": "Double" + }, + { + "Name": "request_header_count_d", + "Type": "Double" + }, + { + "Name": "response_body_len_d", + "Type": "Double" + }, + { + "Name": "response_header_count_d", + "Type": "Double" + }, + { + "Name": "status_code_d", + "Type": "Double" + }, + { + "Name": "status_msg_s", + "Type": "String" + }, + { + "Name": "uri_s", + "Type": "String" + }, + { + "Name": "certificate_curve_s", + "Type": "String" + }, + { + "Name": "AA_b", + "Type": "SByte" + }, + { + "Name": "RA_b", + "Type": "SByte" + }, + { + "Name": "RD_b", + "Type": "SByte" + }, + { + "Name": "TC_b", + "Type": "SByte" + }, + { + "Name": "TTLs_s", + "Type": "String" + }, + { + "Name": "answers_s", + "Type": "String" + }, + { + "Name": "auth_s", + "Type": "String" + }, + { + "Name": "qclass_d", + "Type": "Double" + }, + { + "Name": "qclass_name_s", + "Type": "String" + }, + { + "Name": "qtype_d", + "Type": "Double" + }, + { + "Name": "qtype_name_s", + "Type": "String" + }, + { + "Name": "query_s", + "Type": "String" + }, + { + "Name": "rcode_d", + "Type": "Double" + }, + { + "Name": "rcode_name_s", + "Type": "String" + }, + { + "Name": "rejected_b", + "Type": "SByte" + }, + { + "Name": "saw_query_b", + "Type": "SByte" + }, + { + "Name": "saw_reply_b", + "Type": "SByte" + }, + { + "Name": "total_answers_d", + "Type": "Double" + }, + { + "Name": "total_replies_d", + "Type": "Double" + }, + { + "Name": "trans_id_d", + "Type": "Double" + }, + { + "Name": "issuer_s", + "Type": "String" + }, + { + "Name": "next_protocol_s", + "Type": "String" + }, + { + "Name": "subject_s", + "Type": "String" + }, + { + "Name": "basic_constraints_ca_b", + "Type": "SByte" + }, + { + "Name": "basic_constraints_path_len_d", + "Type": "Double" + }, + { + "Name": "certificate_cn_s", + "Type": "String" + }, + { + "Name": "certificate_exponent_s", + "Type": "String" + }, + { + "Name": "certificate_issuer_s", + "Type": "String" + }, + { + "Name": "certificate_key_alg_s", + "Type": "String" + }, + { + "Name": "certificate_key_length_s", + "Type": "String" + }, + { + "Name": "certificate_key_type_s", + "Type": "String" + }, + { + "Name": "certificate_not_valid_after_d", + "Type": "Double" + }, + { + "Name": "certificate_not_valid_before_d", + "Type": "Double" + }, + { + "Name": "certificate_self_issued_b", + "Type": "SByte" + }, + { + "Name": "certificate_serial_s", + "Type": "String" + }, + { + "Name": "certificate_sig_alg_s", + "Type": "String" + }, + { + "Name": "certificate_subject_s", + "Type": "String" + }, + { + "Name": "certificate_version_d", + "Type": "Double" + }, + { + "Name": "san_dns_s", + "Type": "String" + }, + { + "Name": "san_other_fields_b", + "Type": "SByte" + }, + { + "Name": "community_id_s", + "Type": "String" + }, + { + "Name": "conn_state_s", + "Type": "String" + }, + { + "Name": "duration_d", + "Type": "Double" + }, + { + "Name": "first_orig_resp_data_pkt_s", + "Type": "String" + }, + { + "Name": "first_orig_resp_data_pkt_time_d", + "Type": "Double" + }, + { + "Name": "first_orig_resp_pkt_time_d", + "Type": "Double" + }, + { + "Name": "first_resp_orig_data_pkt_s", + "Type": "String" + }, + { + "Name": "first_resp_orig_data_pkt_time_d", + "Type": "Double" + }, + { + "Name": "first_resp_orig_pkt_time_d", + "Type": "Double" + }, + { + "Name": "id_ip_ver_s", + "Type": "String" + }, + { + "Name": "id_orig_h_s", + "Type": "String" + }, + { + "Name": "id_orig_p_d", + "Type": "Double" + }, + { + "Name": "id_resp_h_s", + "Type": "String" + }, + { + "Name": "id_resp_p_d", + "Type": "Double" + }, + { + "Name": "local_orig_b", + "Type": "SByte" + }, + { + "Name": "local_resp_b", + "Type": "SByte" + }, + { + "Name": "metadata_type_s", + "Type": "String" + }, + { + "Name": "orig_hostname_s", + "Type": "String" + }, + { + "Name": "orig_huid_s", + "Type": "String" + }, + { + "Name": "orig_ip_bytes_s", + "Type": "String" + }, + { + "Name": "orig_pkts_d", + "Type": "Double" + }, + { + "Name": "orig_sluid_s", + "Type": "String" + }, + { + "Name": "orig_vlan_id_d", + "Type": "Double" + }, + { + "Name": "proto_d", + "Type": "Double" + }, + { + "Name": "protoName_s", + "Type": "String" + }, + { + "Name": "resp_domain_s", + "Type": "String" + }, + { + "Name": "resp_ip_bytes_s", + "Type": "String" + }, + { + "Name": "resp_multihomed_b", + "Type": "SByte" + }, + { + "Name": "resp_pkts_d", + "Type": "Double" + }, + { + "Name": "resp_vlan_id_d", + "Type": "Double" + }, + { + "Name": "sensor_uid_s", + "Type": "String" + }, + { + "Name": "service_s", + "Type": "String" + }, + { + "Name": "session_start_time_d", + "Type": "Double" + }, + { + "Name": "ts_d", + "Type": "Double" + }, + { + "Name": "uid_s", + "Type": "String" + }, + { + "Name": "cipher_s", + "Type": "String" + }, + { + "Name": "client_curve_num_s", + "Type": "String" + }, + { + "Name": "client_ec_point_format_s", + "Type": "String" + }, + { + "Name": "client_extension_s", + "Type": "String" + }, + { + "Name": "client_version_s", + "Type": "String" + }, + { + "Name": "client_version_num_d", + "Type": "Double" + }, + { + "Name": "curve_s", + "Type": "String" + }, + { + "Name": "established_b", + "Type": "SByte" + }, + { + "Name": "ja3_g", + "Type": "String" + }, + { + "Name": "ja3s_g", + "Type": "String" + }, + { + "Name": "server_extensions_s", + "Type": "String" + }, + { + "Name": "server_name_s", + "Type": "String" + }, + { + "Name": "version_s", + "Type": "String" + }, + { + "Name": "version_num_d", + "Type": "Double" + }, + { + "Name": "resp_hostname_s", + "Type": "String" + }, + { + "Name": "resp_huid_s", + "Type": "String" + }, + { + "Name": "resp_sluid_s", + "Type": "String" + }, + { + "Name": "Type", + "Type": "String" + }, + { + "Name": "_ResourceId", + "Type": "String" + } + ] +} diff --git a/.script/tests/KqlvalidationsTests/KqlValidationTests.cs b/.script/tests/KqlvalidationsTests/KqlValidationTests.cs index ba1b14516f..dc62f6ea9d 100644 --- a/.script/tests/KqlvalidationsTests/KqlValidationTests.cs +++ b/.script/tests/KqlvalidationsTests/KqlValidationTests.cs @@ -115,8 +115,17 @@ namespace Kqlvalidations.Tests Dictionary yaml = ReadAndDeserializeYaml(encodedFilePath); var queryParamsAsLetStatements = GenerateFunctionParametersAsLetStatements(yaml); var queryStr = queryParamsAsLetStatements + (string)yaml["ParserQuery"]; - var id = (string)yaml["ParserName"]; - ValidateKql(id, queryStr); + + //Ignore known issues + object id; + yaml.TryGetValue("Id", out id); + if (id != null && ShouldSkipTemplateValidation((string)yaml["Id"])) + { + return; + } + + var parserName = (string)yaml["ParserName"]; + ValidateKql(parserName, queryStr); } private void ValidateKql(string id, string queryStr) diff --git a/.script/tests/KqlvalidationsTests/SkipValidationsTemplates.json b/.script/tests/KqlvalidationsTests/SkipValidationsTemplates.json index c6d0c794b0..a8c7c3f5c8 100644 --- a/.script/tests/KqlvalidationsTests/SkipValidationsTemplates.json +++ b/.script/tests/KqlvalidationsTests/SkipValidationsTemplates.json @@ -23,5 +23,10 @@ "id": "ac9e233e-44d4-45eb-b522-6e47445f6582", "templateName": "CrashdumpdisabledonhostASIM.yaml", "validationFailReason": "Valid imTable" + }, + { + "id": "bca035b7-7292-4145-ae8b-b7216bec9dd1", + "templateName": "vimNetworkSessionMicrosoftMD4IoT.yaml", + "validationFailReason": "The name 'LocalPort' does not refer to any known column, table, variable or function." } ] \ No newline at end of file diff --git a/Parsers/ASimNetworkSession/Parsers/vimNetworkSessionMicrosoftMD4IoT.yaml b/Parsers/ASimNetworkSession/Parsers/vimNetworkSessionMicrosoftMD4IoT.yaml index 0aeeeb88a4..3aa0056943 100644 --- a/Parsers/ASimNetworkSession/Parsers/vimNetworkSessionMicrosoftMD4IoT.yaml +++ b/Parsers/ASimNetworkSession/Parsers/vimNetworkSessionMicrosoftMD4IoT.yaml @@ -1,3 +1,4 @@ +Id: bca035b7-7292-4145-ae8b-b7216bec9dd1 Parser: Title: Network Session ASIM filtering parser for Microsoft Defender for IoT Version: '0.2' From 6fef31ff4fdbc85bfa765f1e91e4b7e8205a7f1d Mon Sep 17 00:00:00 2001 From: sivanguetta Date: Sun, 10 Apr 2022 16:01:27 +0300 Subject: [PATCH 4/5] Fix Path.DirectorySeparatorChar --- .../ParsersCustomJsonDirectoryFunctionsLoader.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs b/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs index 3ecd9943f1..6199ab4246 100644 --- a/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs +++ b/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs @@ -1,11 +1,8 @@ using Microsoft.Azure.Sentinel.KustoServices.Contract; using Microsoft.Azure.Sentinel.KustoServices.Implementation; -using Newtonsoft.Json; -using System; using System.Collections.Generic; using System.IO; using System.Linq; -using System.Text; using YamlDotNet.Serialization; namespace Kqlvalidations.Tests.FunctionSchemasLoaders @@ -50,7 +47,7 @@ namespace Kqlvalidations.Tests.FunctionSchemasLoaders var parsersYamlFiles = parsersYamlFilesLoader.GetFilesNames(); return parsersYamlFiles.Select(fileName => { - var schema = fileName.Split("\\")[^3]; + var schema = fileName.Split(Path.DirectorySeparatorChar)[^3]; var resultColumns = schemaToResultColumnsMapping[schema]; return GetParserFunctionSchema(fileName, resultColumns); }); From a94a9a24c958540b3031cdb0c6c13bac2ca62cac Mon Sep 17 00:00:00 2001 From: sivanguetta Date: Mon, 11 Apr 2022 12:46:11 +0300 Subject: [PATCH 5/5] CR --- ...arsersCustomJsonDirectoryFunctionsLoader.cs | 6 ++---- .../FunctionSchemasLoaders/ParsersDatabase.cs | 8 +++++++- .../KqlvalidationsTests/KqlValidationTests.cs | 18 +++++++++++++----- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs b/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs index 6199ab4246..ce6528f385 100644 --- a/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs +++ b/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersCustomJsonDirectoryFunctionsLoader.cs @@ -13,7 +13,6 @@ namespace Kqlvalidations.Tests.FunctionSchemasLoaders { } - public override IEnumerable Load() { var sampleFunctions = base.Load(); @@ -78,9 +77,8 @@ namespace Kqlvalidations.Tests.FunctionSchemasLoaders /// The parser's function parameters private List GetFunctionParameters(dynamic yaml) { - object functionParamsObject; var functionParameters = new List(); - if (yaml.TryGetValue("ParserParams", out functionParamsObject)) + if (yaml.TryGetValue("ParserParams", out object functionParamsObject)) { var parserParams = (List)functionParamsObject; functionParameters = parserParams.Select(ConvertObjectToFunctionParameter).ToList(); @@ -92,7 +90,7 @@ namespace Kqlvalidations.Tests.FunctionSchemasLoaders /// /// Convert object to function parameter /// - /// The function parameter as a object + /// The function parameter as an object /// The function parameter private FunctionParameter ConvertObjectToFunctionParameter(object parameter) { diff --git a/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersDatabase.cs b/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersDatabase.cs index a9ff07469a..ffe341a622 100644 --- a/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersDatabase.cs +++ b/.script/tests/KqlvalidationsTests/FunctionSchemasLoaders/ParsersDatabase.cs @@ -12,7 +12,7 @@ namespace Kqlvalidations.Tests.FunctionSchemasLoaders { public static class ParsersDatabase { - public static ParserConfiguration[] Parsers => new ParserConfiguration[] + public static List Parsers => new List() { new ParserConfiguration() { @@ -34,7 +34,13 @@ namespace Kqlvalidations.Tests.FunctionSchemasLoaders public class ParserConfiguration { + /// + /// The schema name + /// public string Schema { get; set; } + /// + /// A sample function for this schema. Parser functions that use this schema duplicate the result columns from the sample function. + /// public string SampleFunctionName { get; set; } } } diff --git a/.script/tests/KqlvalidationsTests/KqlValidationTests.cs b/.script/tests/KqlvalidationsTests/KqlValidationTests.cs index dc62f6ea9d..7f67ec4070 100644 --- a/.script/tests/KqlvalidationsTests/KqlValidationTests.cs +++ b/.script/tests/KqlvalidationsTests/KqlValidationTests.cs @@ -117,8 +117,7 @@ namespace Kqlvalidations.Tests var queryStr = queryParamsAsLetStatements + (string)yaml["ParserQuery"]; //Ignore known issues - object id; - yaml.TryGetValue("Id", out id); + yaml.TryGetValue("Id", out object id); if (id != null && ShouldSkipTemplateValidation((string)yaml["Id"])) { return; @@ -183,10 +182,14 @@ namespace Kqlvalidations.Tests return (curlineIndex + 1, col); } + /// + /// Generate a string of function parameters as let statements. + /// + /// The parser's yaml file + /// The function parameters as let statements private string GenerateFunctionParametersAsLetStatements(Dictionary yaml) { - object parserParamsObject; - if (yaml.TryGetValue("ParserParams", out parserParamsObject)) + if (yaml.TryGetValue("ParserParams", out object parserParamsObject)) { var parserParams = (List)parserParamsObject; return string.Join(Environment.NewLine, parserParams.Select(GenerateParamaterAsLetStatement).ToList()); @@ -194,11 +197,16 @@ namespace Kqlvalidations.Tests return ""; } + /// + /// Convert function parameter to a let statement with the format 'let = ; + /// + /// A function parameter as an object + /// A function parameter as a let statement private string GenerateParamaterAsLetStatement(object parameter) { var dictionary = (Dictionary)parameter; string name = (string)dictionary["Name"]; - string defaultValue = (string)dictionary["Type"] == "string" ? $"'{(string)dictionary["Default"]}'" : (string)dictionary["Default"]; + string defaultValue = (string)dictionary["Type"] == "string" ? $"'{dictionary["Default"]}'" : (string)dictionary["Default"]; return $"let {name}= {defaultValue};"; } }