...

Text file src/github.com/Azure/azure-sdk-for-go/eng/common/scripts/Cosmos-Emulator.ps1

Documentation: github.com/Azure/azure-sdk-for-go/eng/common/scripts

     1<#
     2.SYNOPSIS
     3Script for installing and launching cosmos emulator
     4
     5.DESCRIPTION
     6This script downloads, installs and launches cosmosdb-emulator.
     7
     8.PARAMETER EmulatorMsiUrl
     9Uri for downloading the cosmosdb-emulator
    10
    11.PARAMETER StartParameters
    12Parameter with which to launch the cosmosdb-emulator
    13
    14.PARAMETER Stage
    15Determines what part of the script to run. Has to be either Install or Launch
    16#>
    17[CmdletBinding()]
    18Param (
    19  [string] $EmulatorMsiUrl = "https://aka.ms/cosmosdb-emulator",
    20  [string] $StartParameters,
    21  [Parameter(Mandatory=$True)]
    22  [ValidateSet('Install', 'Launch')]
    23  [string] $Stage
    24)
    25
    26$targetDir = Join-Path $Env:Temp AzureCosmosEmulator
    27$logFile = Join-Path $Env:Temp log.txt
    28$productName = "Azure Cosmos DB Emulator"
    29$emulator = (Join-Path $targetDir (Join-Path $productName "Microsoft.Azure.Cosmos.Emulator.exe"))
    30
    31if ($Stage -eq "Install")
    32{
    33  $downloadTryCount = 0
    34  New-Item $targetDir -Type Directory
    35  New-Item $logFile -Type File
    36  do
    37  {
    38    # Download and Extract Public Cosmos DB Emulator
    39    Write-Host "Downloading and extracting Cosmos DB Emulator - $EmulatorMsiUrl"
    40    Write-Host "Target Directory $targetDir"
    41    Write-Host "Log File $logFile"
    42
    43    $downloadTryCount++
    44    Write-Host "Download Try Count: $downloadTryCount"
    45    Remove-Item -Path (Join-Path $targetDir '*') -Recurse
    46    Clear-Content -Path $logFile
    47
    48    $installProcess  = Start-Process msiexec -Wait -PassThru -ArgumentList "/a $EmulatorMsiUrl TARGETDIR=$targetDir /qn /liew $logFile"
    49    Get-Content $logFile
    50    Write-Host "Exit Code: $($installProcess.ExitCode)"
    51  }
    52  while(($installProcess.ExitCode -ne 0) -and ($downloadTryCount -lt 3))
    53
    54  if(Test-Path (Join-Path $Env:LOCALAPPDATA CosmosDbEmulator))
    55  {
    56    Write-Host "Deleting Cosmos DB Emulator data"
    57    Remove-Item -Recurse -Force $Env:LOCALAPPDATA\CosmosDbEmulator
    58  }
    59
    60  Write-Host "Getting Cosmos DB Emulator Version"
    61  $fileVersion = Get-ChildItem $emulator
    62  Write-Host $emulator $fileVersion.VersionInfo
    63}
    64
    65if ($Stage -eq "Launch")
    66{
    67  Write-Host "Launching Cosmos DB Emulator"
    68  if (!(Test-Path $emulator)) {
    69    Write-Error "The emulator is not installed where expected at '$emulator'"
    70    return
    71  }
    72
    73  $process = Start-Process $emulator -ArgumentList "/getstatus" -PassThru -Wait
    74  switch ($process.ExitCode) {
    75    1 {
    76      Write-Host "The emulator is already starting"
    77      return
    78    }
    79    2 {
    80      Write-Host "The emulator is already running"
    81      return
    82    }
    83    3 {
    84      Write-Host "The emulator is stopped"
    85    }
    86    default {
    87      Write-Host "Unrecognized exit code $($process.ExitCode)"
    88      return
    89    }
    90  }
    91
    92  $argumentList = ""
    93  if (-not [string]::IsNullOrEmpty($StartParameters)) {
    94      $argumentList += , $StartParameters
    95  } else {
    96    # Use the default params if none provided
    97    $argumentList = "/noexplorer /noui /enablepreview /disableratelimiting /enableaadauthentication"
    98  }
    99
   100  Write-Host "Starting emulator process: $emulator $argumentList"
   101  $process = Start-Process $emulator -ArgumentList $argumentList -ErrorAction Stop -PassThru
   102  Write-Host "Emulator process started: $($process.Name), $($process.FileVersion)"
   103
   104  $Timeout = 600
   105  $result="NotYetStarted"
   106  $complete = if ($Timeout -gt 0) {
   107    $start = [DateTimeOffset]::Now
   108    $stop = $start.AddSeconds($Timeout)
   109    {
   110      $result -eq "Running" -or [DateTimeOffset]::Now -ge $stop
   111    }
   112  }
   113  else {
   114    {
   115      $result -eq "Running"
   116    }
   117  }
   118
   119  do {
   120    $process = Start-Process $emulator -ArgumentList "/getstatus" -PassThru -Wait
   121    switch ($process.ExitCode) {
   122      1 {
   123        Write-Host "The emulator is starting"
   124      }
   125      2 {
   126        Write-Host "The emulator is running"
   127        $result="Running"
   128        return
   129      }
   130      3 {
   131        Write-Host "The emulator is stopped"
   132      }
   133      default {
   134        Write-Host "Unrecognized exit code $($process.ExitCode)"
   135      }
   136    }
   137    Start-Sleep -Seconds 5
   138  }
   139  until ($complete.Invoke())
   140  Write-Error "The emulator failed to reach Running status within ${Timeout} seconds"
   141}

View as plain text