Skip to content

Commit 5f5e1e1

Browse files
committed
Split out oss versions
1 parent 2e0fa7c commit 5f5e1e1

9 files changed

Lines changed: 763 additions & 114 deletions

File tree

build/docker-compose.test.yml

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
version: '3.8'
2+
3+
services:
4+
sql:
5+
container_name: fhir-test-sql
6+
image: mcr.microsoft.com/mssql/server:2022-latest
7+
environment:
8+
ACCEPT_EULA: Y
9+
SA_PASSWORD: ${SQL_SA_PASSWORD:-YourStrong!Passw0rd}
10+
MSSQL_PID: Developer
11+
ports:
12+
- "1433:1433"
13+
healthcheck:
14+
test: /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "$${SA_PASSWORD}" -C -Q "SELECT 1" || exit 1
15+
interval: 10s
16+
timeout: 3s
17+
retries: 10
18+
start_period: 10s
19+
volumes:
20+
- sql-data:/var/opt/mssql
21+
22+
cosmos:
23+
container_name: fhir-test-cosmos
24+
image: mcr.microsoft.com/cosmosdb/linux/azure-cosmos-emulator:latest
25+
mem_limit: 3g
26+
cpu_count: 2
27+
environment:
28+
AZURE_COSMOS_EMULATOR_PARTITION_COUNT: 2
29+
AZURE_COSMOS_EMULATOR_ENABLE_DATA_PERSISTENCE: "false"
30+
AZURE_COSMOS_EMULATOR_IP_ADDRESS_OVERRIDE: "127.0.0.1"
31+
ports:
32+
- "8081:8081"
33+
- "10250-10255:10250-10255"
34+
healthcheck:
35+
test: curl -k https://localhost:8081/_explorer/emulator.pem || exit 1
36+
interval: 30s
37+
timeout: 10s
38+
retries: 10
39+
start_period: 120s
40+
41+
azurite:
42+
container_name: fhir-test-azurite
43+
image: mcr.microsoft.com/azure-storage/azurite:latest
44+
ports:
45+
- "10000:10000"
46+
- "10001:10001"
47+
- "10002:10002"
48+
command: azurite --blobHost 0.0.0.0 --queueHost 0.0.0.0 --tableHost 0.0.0.0 --loose
49+
healthcheck:
50+
test: nc -z localhost 10000 || exit 1
51+
interval: 10s
52+
timeout: 3s
53+
retries: 10
54+
start_period: 10s
55+
56+
volumes:
57+
sql-data:
Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
parameters:
2+
- name: version
3+
type: string
4+
5+
steps:
6+
- checkout: self
7+
fetchDepth: 1
8+
fetchTags: false
9+
10+
- task: UseDotNet@2
11+
inputs:
12+
useGlobalJson: true
13+
14+
- task: DockerCompose@0
15+
displayName: 'Start CosmosDB Emulator and Azurite containers'
16+
inputs:
17+
action: 'Run services'
18+
dockerComposeFile: '$(Build.SourcesDirectory)/build/docker-compose.test.yml'
19+
projectName: 'fhir-server-test-${{ lower(parameters.version) }}-cosmos'
20+
dockerComposeCommand: 'up -d cosmos azurite'
21+
detached: true
22+
23+
- script: |
24+
echo "Waiting for Cosmos DB Emulator to be ready..."
25+
timeout=240
26+
elapsed=0
27+
until docker exec fhir-test-cosmos curl -k https://localhost:8081/_explorer/emulator.pem > /dev/null 2>&1 || [ $elapsed -ge $timeout ]; do
28+
echo "Waiting for Cosmos DB Emulator... ($elapsed seconds)"
29+
sleep 10
30+
elapsed=$((elapsed + 10))
31+
done
32+
echo "Cosmos DB Emulator is ready"
33+
displayName: 'Verify Cosmos DB Emulator connectivity'
34+
35+
- script: |
36+
echo "Exporting and trusting CosmosDB Emulator SSL certificate..."
37+
# Extract certificate from the emulator
38+
curl -k https://localhost:8081/_explorer/emulator.pem > ~/emulatorcert.crt
39+
40+
# Install to system certificate store (for curl/wget)
41+
sudo cp ~/emulatorcert.crt /usr/local/share/ca-certificates/
42+
sudo update-ca-certificates
43+
44+
# Also install as PEM file for .NET Core on Linux
45+
# .NET on Linux uses OpenSSL and may need explicit cert configuration
46+
sudo mkdir -p /etc/ssl/certs
47+
sudo cp ~/emulatorcert.crt /etc/ssl/certs/cosmosdb-emulator.pem
48+
49+
# Create a combined bundle for .NET
50+
cat /etc/ssl/certs/ca-certificates.crt ~/emulatorcert.crt > ~/combined-certs.crt
51+
sudo cp ~/combined-certs.crt /etc/ssl/certs/ca-certificates-with-cosmos.crt
52+
53+
# Verify certificate installation
54+
echo "Verifying certificate is installed..."
55+
ls -la /usr/local/share/ca-certificates/
56+
ls -la /etc/ssl/certs/cosmosdb-emulator.pem
57+
58+
echo "CosmosDB Emulator certificate trusted"
59+
displayName: 'Trust CosmosDB Emulator SSL certificate'
60+
61+
- script: |
62+
echo "Waiting for Azurite to be ready..."
63+
timeout=60
64+
elapsed=0
65+
until curl -f http://localhost:10000/devstoreaccount1?restype=account > /dev/null 2>&1 || [ $elapsed -ge $timeout ]; do
66+
echo "Waiting for Azurite... ($elapsed seconds)"
67+
sleep 5
68+
elapsed=$((elapsed + 5))
69+
done
70+
echo "Azurite is ready"
71+
displayName: 'Verify Azurite connectivity'
72+
73+
- task: DotNetCoreCLI@2
74+
displayName: 'Build ${{ parameters.version }} integration test project'
75+
inputs:
76+
command: build
77+
projects: 'test/**/*${{ parameters.version }}.Tests.Integration.csproj'
78+
arguments: '--configuration $(buildConfiguration) -f $(defaultBuildFramework)'
79+
80+
- task: DotNetCoreCLI@2
81+
displayName: 'Run ${{ parameters.version }} CosmosDB Integration Tests'
82+
inputs:
83+
command: test
84+
projects: 'test/**/*${{ parameters.version }}.Tests.Integration.csproj'
85+
arguments: '--filter DisplayName!~SqlServer --configuration $(buildConfiguration) --collect "XPlat Code Coverage" -s "$(build.sourcesDirectory)/CodeCoverage.runsettings" -v normal --no-build -f $(defaultBuildFramework)'
86+
testRunTitle: '${{ parameters.version }} Docker CosmosDB Integration Tests'
87+
publishTestResults: true
88+
env:
89+
'CosmosDb__Host': 'https://localhost:8081'
90+
'CosmosDb__Key': 'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
91+
'CosmosDb__DatabaseId': 'FhirTests'
92+
# Linux Cosmos Emulator only supports Gateway mode (Direct mode is not supported)
93+
'CosmosDb__ConnectionMode': 'Gateway'
94+
'TestExportStoreUri': 'http://127.0.0.1:10000/devstoreaccount1'
95+
'TestIntegrationStoreUri': 'http://127.0.0.1:10000/devstoreaccount1'
96+
# SSL certificate configuration for .NET on Linux
97+
'SSL_CERT_FILE': '/etc/ssl/certs/ca-certificates-with-cosmos.crt'
98+
99+
- task: DotNetCoreCLI@2
100+
displayName: 'Build ${{ parameters.version }} E2E test project'
101+
inputs:
102+
command: build
103+
projects: 'test/**/*${{ parameters.version }}.Tests.E2E.csproj'
104+
arguments: '--configuration $(buildConfiguration) -f $(defaultBuildFramework)'
105+
106+
- task: DotNetCoreCLI@2
107+
displayName: 'Run ${{ parameters.version }} CosmosDB E2E Tests (In-Proc)'
108+
inputs:
109+
command: test
110+
projects: 'test/**/*${{ parameters.version }}.Tests.E2E.csproj'
111+
arguments: '--filter FullyQualifiedName~CosmosDb --configuration $(buildConfiguration) --collect "XPlat Code Coverage" -s "$(build.sourcesDirectory)/CodeCoverage.runsettings" -v normal --no-build -f $(defaultBuildFramework)'
112+
testRunTitle: '${{ parameters.version }} Docker CosmosDB E2E Tests'
113+
publishTestResults: true
114+
env:
115+
'CosmosDb__Host': 'https://localhost:8081'
116+
'CosmosDb__Key': 'C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=='
117+
'CosmosDb__DatabaseId': 'FhirTests'
118+
# Linux Cosmos Emulator only supports Gateway mode (Direct mode is not supported)
119+
'CosmosDb__ConnectionMode': 'Gateway'
120+
'TestExportStoreUri': 'http://127.0.0.1:10000/devstoreaccount1'
121+
'TestIntegrationStoreUri': 'http://127.0.0.1:10000/devstoreaccount1'
122+
# SSL certificate configuration for .NET on Linux
123+
'SSL_CERT_FILE': '/etc/ssl/certs/ca-certificates-with-cosmos.crt'
124+
125+
- task: reportgenerator@5
126+
displayName: 'Aggregate ${{ parameters.version }} CosmosDB test coverage'
127+
condition: succeededOrFailed()
128+
inputs:
129+
reports: '$(Agent.TempDirectory)/*/coverage.cobertura.xml'
130+
reporttypes: 'Cobertura'
131+
targetdir: '$(Agent.TempDirectory)/coverage'
132+
133+
- task: PublishBuildArtifacts@1
134+
displayName: 'Publish ${{ parameters.version }} CosmosDB test coverage'
135+
condition: succeededOrFailed()
136+
inputs:
137+
pathToPublish: '$(Agent.TempDirectory)/coverage'
138+
artifactName: 'Coverage_Docker_CosmosDB_${{ parameters.version }}'
139+
artifactType: 'container'
140+
141+
- task: PublishCodeCoverageResults@1
142+
displayName: 'Publish ${{ parameters.version }} CosmosDB code coverage results'
143+
condition: always()
144+
inputs:
145+
codeCoverageTool: 'Cobertura'
146+
summaryFileLocation: '$(Agent.TempDirectory)/coverage/Cobertura.xml'
147+
reportDirectory: '$(Agent.TempDirectory)/coverage'
148+
149+
- task: DockerCompose@0
150+
displayName: 'Stop and remove containers'
151+
condition: always()
152+
inputs:
153+
action: 'Run a Docker Compose command'
154+
dockerComposeFile: '$(Build.SourcesDirectory)/build/docker-compose.test.yml'
155+
projectName: 'fhir-server-test-${{ lower(parameters.version) }}-cosmos'
156+
dockerComposeCommand: 'down -v'

0 commit comments

Comments
 (0)