| gio | f6ad298 | 2024-08-23 17:42:49 +0400 | [diff] [blame] | 1 | package installer |
| 2 | |
| 3 | import ( |
| 4 | "net" |
| 5 | "strings" |
| 6 | "testing" |
| 7 | ) |
| 8 | |
| 9 | func TestParseNginxProxyConfig(t *testing.T) { |
| gio | 721c004 | 2025-04-03 11:56:36 +0400 | [diff] [blame] | 10 | cfg, err := ParseNginxProxyConfig(strings.NewReader(` |
| 11 | apiVersion: v1 |
| 12 | kind: ConfigMap |
| 13 | metadata: |
| 14 | name: proxy-backend-config |
| 15 | namespace: foo |
| 16 | data: |
| 17 | nginx.conf: | |
| gio | f6ad298 | 2024-08-23 17:42:49 +0400 | [diff] [blame] | 18 | # user www www; |
| 19 | worker_processes 1; |
| 20 | error_log /dev/null crit; |
| 21 | # pid logs/nginx.pid; |
| 22 | worker_rlimit_nofile 8192; |
| 23 | events { |
| 24 | worker_connections 1024; |
| 25 | } |
| 26 | http { |
| 27 | error_log /var/log/nginx/error.log debug; |
| 28 | log_format dodo '$http_host $proxy_host $status'; |
| 29 | access_log /var/log/nginx/access.log dodo; |
| 30 | map $http_host $backend { |
| 31 | a A; |
| 32 | b B; |
| 33 | } |
| 34 | server { |
| 35 | listen 9090; |
| 36 | location / { |
| 37 | resolver 1.1.1.1; |
| 38 | resolver 2.2.2.2; |
| 39 | proxy_pass http://$backend; |
| 40 | } |
| 41 | } |
| 42 | } |
| gio | 721c004 | 2025-04-03 11:56:36 +0400 | [diff] [blame] | 43 | stream { |
| 44 | server { |
| 45 | listen 9091; |
| 46 | proxy_pass foo:1; |
| 47 | } |
| 48 | server { |
| 49 | listen 9092 udp; |
| 50 | proxy_pass bar:2; |
| 51 | } |
| 52 | server { |
| 53 | listen 9093; |
| 54 | proxy_pass dev:3; |
| 55 | } |
| 56 | } |
| gio | f6ad298 | 2024-08-23 17:42:49 +0400 | [diff] [blame] | 57 | `)) |
| 58 | if err != nil { |
| 59 | t.Fatal(err) |
| 60 | } |
| gio | 721c004 | 2025-04-03 11:56:36 +0400 | [diff] [blame] | 61 | if cfg.Namespace != "foo" { |
| 62 | t.Errorf("invalid namespace: expeced foo, got %s", cfg.Namespace) |
| 63 | } |
| 64 | if cfg.IngressPort != 9090 { |
| 65 | t.Errorf("invalid port: expected 9090, got %d", cfg.IngressPort) |
| gio | f6ad298 | 2024-08-23 17:42:49 +0400 | [diff] [blame] | 66 | } |
| 67 | if len(cfg.Resolvers) != 2 || |
| 68 | !cfg.Resolvers[0].Equal(net.ParseIP("1.1.1.1")) || |
| 69 | !cfg.Resolvers[1].Equal(net.ParseIP("2.2.2.2")) { |
| 70 | t.Errorf("invalid resolvers: expected [1.1.1.1 2.2.2.2], got %s", cfg.Resolvers) |
| 71 | } |
| gio | 721c004 | 2025-04-03 11:56:36 +0400 | [diff] [blame] | 72 | if len(cfg.Ingress) != 2 || |
| 73 | cfg.Ingress["a"] != "A" || |
| 74 | cfg.Ingress["b"] != "B" { |
| 75 | t.Errorf("invalid ingress proxies: expected map[a:A, b:B], got %s", cfg.Ingress) |
| 76 | } |
| 77 | if len(cfg.TCP) != 2 || |
| 78 | cfg.TCP[9091] != "foo:1" || |
| 79 | cfg.TCP[9093] != "dev:3" { |
| 80 | t.Errorf("invalid TCP proxies: expected map[9091:foo:1, 9093:dev:3], got %v", cfg.TCP) |
| 81 | } |
| 82 | if len(cfg.UDP) != 1 || |
| 83 | cfg.UDP[9092] != "bar:2" { |
| 84 | t.Errorf("invalid UDP proxies: expected map[9092:bar:2], got %v", cfg.UDP) |
| gio | f6ad298 | 2024-08-23 17:42:49 +0400 | [diff] [blame] | 85 | } |
| 86 | } |
| 87 | |
| 88 | func TestRenderNginxProxyConfig(t *testing.T) { |
| 89 | cfg := NginxProxyConfig{ |
| gio | 721c004 | 2025-04-03 11:56:36 +0400 | [diff] [blame] | 90 | IngressPort: 8080, |
| 91 | Resolvers: []net.IP{net.ParseIP("1.1.1.1"), net.ParseIP("2.2.2.2")}, |
| 92 | Ingress: map[string]string{ |
| gio | f6ad298 | 2024-08-23 17:42:49 +0400 | [diff] [blame] | 93 | "a": "A", |
| 94 | "b": "B", |
| 95 | }, |
| gio | 721c004 | 2025-04-03 11:56:36 +0400 | [diff] [blame] | 96 | TCP: map[int]string{ |
| 97 | 1: "foo:1", |
| 98 | 3: "dev:3", |
| 99 | }, |
| 100 | UDP: map[int]string{ |
| 101 | 2: "bar:2", |
| 102 | }, |
| gio | f6ad298 | 2024-08-23 17:42:49 +0400 | [diff] [blame] | 103 | PreConf: []string{"line1", "line2"}, |
| 104 | } |
| 105 | var buf strings.Builder |
| 106 | if err := cfg.Render(&buf); err != nil { |
| 107 | t.Fatal(err) |
| 108 | } |
| 109 | t.Log(buf.String()) |
| 110 | } |