API GATEWAY DEMO
This is an example of how to set up a test environment for an Nginx gateway, with tests implemented using Ruby Rspec.
Please read our blog posts Lightweight Tests for your Nginx API Gateway to understand the details of our testing approach.
Project structure explained
├── nginx (Gateway configuration) │ ├── conf.d │ │ └── api-gateway.conf (Location directives) │ ├── dns.conf (DNS resolver) │ └── nginx.conf (Main config) └── tests ├── hosts │ └── hosts (DNS resolutions for internal services) ├── nginx │ ├── conf.d │ │ └── services.conf (Internal services mock) │ └── dns.conf (Test DNS resolver)
Setting up the test docker container required 4 extra steps on top of the target Nginx setup:
- Install and run
/etc/hostsfile with DNS names for our internal services (Step 2)
- Override production DNS resolver and inject virtual server configuration mocking internal services (Step 3)
- Include self signed ssl certificate used in internal services mock (Step 4)
# Production config COPY nginx/* /etc/nginx/ COPY nginx/conf.d/* /etc/nginx/conf.d/ # Test setup # Step 1 RUN apt-get update; apt-get install dnsmasq -y # Step 2 - we can not directly copy it to /etc/hosts since docker will # regenerate the file and overwrite our changes. We will copy content from # /etc/test.hosts to /etc/hosts on runtime in launch.sh script COPY tests/hosts/hosts /etc/test.hosts # Step 3 COPY tests/nginx /etc/nginx/ # Step 4 COPY tests/ssl/nginx-selfsigned.crt /etc/ssl/certs/nginx-selfsigned.crt COPY tests/ssl/nginx-selfsigned.key /etc/ssl/private/nginx-selfsigned.key
Set up testing environment:
$ make compose-up-test
$ make test