Public/New-TEApiTestBGP.ps1

function New-TEApiTestBGP
{
    [CmdletBinding()]
    Param(
        [Parameter( Mandatory=$true, Position = 0)]
        [string]$testName,

        [Parameter(ParameterSetName="CreateBGPTest",
                    Mandatory=$true)]
        [switch]$createBGPTest,

        [Parameter(ParameterSetName="CreateBGPTest",
                    Mandatory=$true)]
        [string]$prefix,

        [Parameter(ParameterSetName="CreateBGPTest")]
        [bool]$includeCoveredPrefix,

        [Parameter(ParameterSetName="CreateDNSServerTest",
                    Mandatory=$true,
                    Position=0)]
        [switch]$CreateDNSServerTest,

        [Parameter(ParameterSetName="UpdateDNSServerTest",
                    Mandatory=$true,
                    Position=0)]
        [switch]$UpdateDNSServerTest,

        [Parameter(ParameterSetName="CreateDNSTraceTest",
                    Mandatory=$true,
                    Position=0)]
        [switch]$CreateDNSTraceTest,

        [Parameter(ParameterSetName="UpdateDNSTraceTest",
                    Mandatory=$true,
                    Position=0)]
        [switch]$UpdateDNSTraceTest,

        [Parameter(ParameterSetName="CreateDNSServerTest",
                    Mandatory=$true)]
        [Parameter(ParameterSetName="UpdateDNSServerTest")]
        [Parameter(ParameterSetName="CreateDNSTraceTest",
                    Mandatory=$true)]
        [Parameter(ParameterSetName="UpdateDNSTraceTest")]
        [array]$agents,

        [Parameter(ParameterSetName="CreateDNSServerTest")]
        [Parameter(ParameterSetName="UpdateDNSServerTest")]
        [bool]$bandwidthMeasurements,

        [Parameter(ParameterSetName="CreateDNSServerTest")]
        [Parameter(ParameterSetName="UpdateDNSServerTest")]
        [bool]$bgpMeasurements,

        [Parameter(ParameterSetName="CreateDNSServerTest")]
        [Parameter(ParameterSetName="UpdateDNSServerTest")]
        [array]$bgpMonitors,

        [Parameter(ParameterSetName="CreateDNSServerTest",
                    Mandatory=$true)]
        [Parameter(ParameterSetName="UpdateDNSServerTest")]            
        [array]$dnsServers,

        [Parameter(ParameterSetName="CreateDNSServerTest",
                    Mandatory=$true)]
        [Parameter(ParameterSetName="CreateDNSTraceTest",
                    Mandatory=$true)]
        [string]$domain,

        [Parameter(ParameterSetName="CreateDNSServerTest",
                    Mandatory=$true)]
        [Parameter(ParameterSetName="UpdateDNSServerTest")]
        [Parameter(ParameterSetName="CreateDNSTraceTest",
                    Mandatory=$true)]
        [Parameter(ParameterSetName="UpdateDNSTraceTest")]
        [int]$interval,

        [Parameter(ParameterSetName="CreateDNSServerTest")]
        [Parameter(ParameterSetName="UpdateDNSServerTest")]
        [bool]$mtuMeasurements,

        [Parameter(ParameterSetName="CreateDNSServerTest")]
        [Parameter(ParameterSetName="UpdateDNSServerTest")]
        [bool]$networkMeasurements,

        [Parameter(ParameterSetName="CreateDNSServerTest")]
        [Parameter(ParameterSetName="UpdateDNSServerTest")]
        [bool]$recursiveQueries,

        [Parameter(ParameterSetName="CreateDNSTraceTest",
                    Mandatory=$true)]
        [validateset('A','AAAA','ANY','CNAME','DNSKEY','DS','MX','NS','NSE','NULL','PTR','RRSIG','SOA','TXT')]
        [string]$type,

        [string]$server,
        [int]$port,

        [validateset('TCP','ICMP')]
        [string]$pingType,

        [string]$url,
        [int]$testId
    )

    Begin{}

    Process{
        $body = @{}

        switch ($PSBoundParameters.keys) {
            'testName'              { $body.testName                = $testName}
            'agents'                { $body.agents                  = $agents}
            'prefix'                { $body.prefix                  = $prefix}
            'includeCoveredPrefix'  { $body.includeCoveredPrefix    = $includeCoveredPrefix}
            'bandwidthMeasurements' { $body.bandwidthMeasurements   = $bandwidthMeasurements}
            'bgpMeasurements'       { $body.bgpMeasurements         = $bgpMeasurements}
            'bgpMonitors'           { $body.bgpMonitors             = $bgpMonitors}
            'dnsServers'            { $body.dnsServers              = $dnsServers}
            'interval'              { $body.interval                = $interval}
            'mtuMeasurements'       { $body.mtuMeasurements         = $mtuMeasurements}
            'networkMeasurements'   { $body.networkMeasurements     = $networkMeasurements}
            'recursiveQueries'      { $body.recursiveQueries        = $recursiveQueries}
            'agentId'               { $body.agentId                 = $agentId}
            'server'                { $body.server                  = $server}
            'port'                  { $body.port                    = $port}
            'pingType'              { $body.pingType                = $pingType}
            'url'                   { $body.url                     = $url}
            'domain'                { $body.domain                  = $domain}
            'type'                  { $body.type                    = $type}
            'testId'                { $body.testId                  = $testId}
        }

        $jsonBody = $body | ConvertTo-Json 
        #Write-Output $jsonBody
        $urlComponentsList = New-Object System.Collections.Generic.List[System.Object]
        $urlComponentsList.add('tests')


        switch ($PSBoundParameters.keys) {
            'createDnsServerTest'   { $urlComponentsList.add('dns-server')}     
        }
        $urlComponentsList.add('new')
        $urlComponents = $urlComponentsList.ToArray()
        #Write-Output $urlComponents
        $results = send-TEApi -method post -urlcomponents $urlComponents -body $jsonBody
        #Write-host "Test Created Successfully" -ForegroundColor Green
        Write-Output $results.test
    }
    End{}
}