Skip to content

Commit

Permalink
Add test for TLS edge.
Browse files Browse the repository at this point in the history
  • Loading branch information
alexdlaird committed Dec 13, 2024
1 parent b4014e5 commit c05fce6
Show file tree
Hide file tree
Showing 4 changed files with 100 additions and 32 deletions.
6 changes: 4 additions & 2 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,14 @@ jobs:
env:
FORCE_COLOR: 1
NGROK_AUTHTOKEN: ${{ secrets.NGROK_AUTHTOKEN }}
NGROK_API_KEY: ${{ secrets.NGROK_API_KEY }}
NGROK_DOMAIN: ${{ secrets.NGROK_DOMAIN }}
NGROK_HTTP_EDGE: ${{ secrets.NGROK_HTTP_EDGE }}
NGROK_TCP_EDGE: ${{ secrets.NGROK_TCP_EDGE }}
NGROK_API_KEY: ${{ secrets.NGROK_API_KEY }}
NGROK_HTTP_EDGE_ENDPOINT: ${{ secrets.NGROK_HTTP_EDGE_ENDPOINT }}
NGROK_TCP_EDGE: ${{ secrets.NGROK_TCP_EDGE }}
NGROK_TCP_EDGE_ENDPOINT: ${{ secrets.NGROK_TCP_EDGE_ENDPOINT }}
NGROK_TLS_EDGE: ${{ secrets.NGROK_TLS_EDGE }}
NGROK_TLS_EDGE_ENDPOINT: ${{ secrets.NGROK_TLS_EDGE_ENDPOINT }}

strategy:
fail-fast: false
Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ jobs:
env:
FORCE_COLOR: 1
NGROK_AUTHTOKEN: ${{ secrets.NGROK_AUTHTOKEN }}
NGROK_API_KEY: ${{ secrets.NGROK_API_KEY }}
NGROK_DOMAIN: ${{ secrets.NGROK_DOMAIN }}
NGROK_HTTP_EDGE: ${{ secrets.NGROK_HTTP_EDGE }}
NGROK_TCP_EDGE: ${{ secrets.NGROK_TCP_EDGE }}
NGROK_API_KEY: ${{ secrets.NGROK_API_KEY }}
NGROK_HTTP_EDGE_ENDPOINT: ${{ secrets.NGROK_HTTP_EDGE_ENDPOINT }}
NGROK_TCP_EDGE: ${{ secrets.NGROK_TCP_EDGE }}
NGROK_TCP_EDGE_ENDPOINT: ${{ secrets.NGROK_TCP_EDGE_ENDPOINT }}
NGROK_TLS_EDGE: ${{ secrets.NGROK_TLS_EDGE }}
NGROK_TLS_EDGE_ENDPOINT: ${{ secrets.NGROK_TLS_EDGE_ENDPOINT }}

runs-on: ubuntu-latest

Expand Down
6 changes: 4 additions & 2 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,14 @@ jobs:
env:
FORCE_COLOR: 1
NGROK_AUTHTOKEN: ${{ secrets.NGROK_AUTHTOKEN }}
NGROK_API_KEY: ${{ secrets.NGROK_API_KEY }}
NGROK_DOMAIN: ${{ secrets.NGROK_DOMAIN }}
NGROK_HTTP_EDGE: ${{ secrets.NGROK_HTTP_EDGE }}
NGROK_TCP_EDGE: ${{ secrets.NGROK_TCP_EDGE }}
NGROK_API_KEY: ${{ secrets.NGROK_API_KEY }}
NGROK_HTTP_EDGE_ENDPOINT: ${{ secrets.NGROK_HTTP_EDGE_ENDPOINT }}
NGROK_TCP_EDGE: ${{ secrets.NGROK_TCP_EDGE }}
NGROK_TCP_EDGE_ENDPOINT: ${{ secrets.NGROK_TCP_EDGE_ENDPOINT }}
NGROK_TLS_EDGE: ${{ secrets.NGROK_TLS_EDGE }}
NGROK_TLS_EDGE_ENDPOINT: ${{ secrets.NGROK_TLS_EDGE_ENDPOINT }}

runs-on: ubuntu-latest

Expand Down
114 changes: 88 additions & 26 deletions tests/test_ngrok.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ def test_connect_tls(self):
self.assertEqual(len(ngrok._current_tunnels.keys()), 0)

# WHEN
ngrok_tunnel = ngrok.connect("80", proto="tls", domain=os.environ.get("NGROK_DOMAIN"),
ngrok_tunnel = ngrok.connect("443", proto="tls", domain=os.environ.get("NGROK_DOMAIN"),
terminate_at="upstream", pyngrok_config=self.pyngrok_config_v3)
current_process = ngrok.get_ngrok_process(self.pyngrok_config_v3)

Expand All @@ -115,9 +115,9 @@ def test_connect_tls(self):
self.assertIsNone(current_process.proc.poll())
self.assertTrue(current_process._monitor_thread.is_alive())
self.assertIsNotNone(ngrok_tunnel.id)
self.assertTrue(ngrok_tunnel.name.startswith("tls-80-"))
self.assertTrue(ngrok_tunnel.name.startswith("tls-443-"))
self.assertEqual("tls", ngrok_tunnel.proto)
self.assertEqual("localhost:80", ngrok_tunnel.config["addr"])
self.assertEqual("localhost:443", ngrok_tunnel.config["addr"])
self.assertIsNotNone(ngrok_tunnel.public_url)
self.assertIsNotNone(process.get_process(self.pyngrok_config_v3))
self.assertIn('tls://', ngrok_tunnel.public_url)
Expand Down Expand Up @@ -680,14 +680,11 @@ def test_tunnel_definitions_tls(self):
self.assertTrue(tls_tunnel.public_url, f"tls://{domain}")

@unittest.skipIf(not os.environ.get("NGROK_AUTHTOKEN"), "NGROK_AUTHTOKEN environment variable not set")
@unittest.skipIf("NGROK_HTTP_EDGE" not in os.environ, "NGROK_HTTP_EDGE environment variable not set")
@unittest.skipIf("NGROK_TCP_EDGE" not in os.environ, "NGROK_TCP_EDGE environment variable not set")
@unittest.skipIf("NGROK_API_KEY" not in os.environ, "NGROK_API_KEY environment variable not set")
@unittest.skipIf("NGROK_HTTP_EDGE" not in os.environ, "NGROK_HTTP_EDGE environment variable not set")
@unittest.skipIf("NGROK_HTTP_EDGE_ENDPOINT" not in os.environ,
"NGROK_HTTP_EDGE_ENDPOINT environment variable not set")
@unittest.skipIf("NGROK_TCP_EDGE_ENDPOINT" not in os.environ,
"NGROK_TCP_EDGE_ENDPOINT environment variable not set")
def test_ngrok_v3_edge_tunnel_definition(self):
def test_ngrok_v3_edge_http_tunnel_definition(self):
# GIVEN
config = {
"tunnels": {
Expand All @@ -696,12 +693,6 @@ def test_ngrok_v3_edge_tunnel_definition(self):
"labels": [
f"edge={os.environ['NGROK_HTTP_EDGE']}",
]
},
"edge-tcp-tunnel": {
"addr": "22",
"labels": [
f"edge={os.environ['NGROK_TCP_EDGE']}",
]
}
}
}
Expand All @@ -713,7 +704,6 @@ def test_ngrok_v3_edge_tunnel_definition(self):

# WHEN
edge_http_tunnel = ngrok.connect(name="edge-http-tunnel", pyngrok_config=pyngrok_config)
edge_tcp_tunnel = ngrok.connect(name="edge-tcp-tunnel", pyngrok_config=pyngrok_config)
tunnels = sorted(ngrok.get_tunnels(pyngrok_config=pyngrok_config), key=lambda x: x.proto)

# THEN
Expand All @@ -723,25 +713,97 @@ def test_ngrok_v3_edge_tunnel_definition(self):
self.assertTrue(edge_http_tunnel.config["addr"].startswith("http://"))
self.assertEqual(edge_http_tunnel.proto, "https")
self.assertEqual(edge_http_tunnel.public_url, os.environ["NGROK_HTTP_EDGE_ENDPOINT"])
self.assertEqual(len(tunnels), 1)
self.assertEqual(tunnels[0].name, "edge-http-tunnel")
self.assertEqual(tunnels[0].config["addr"],
f"http://localhost:{config['tunnels']['edge-http-tunnel']['addr']}")
self.assertTrue(tunnels[0].config["addr"].startswith("http://"))
self.assertEqual(tunnels[0].proto, "https")
self.assertEqual(tunnels[0].public_url, os.environ["NGROK_HTTP_EDGE_ENDPOINT"])

@unittest.skipIf(not os.environ.get("NGROK_AUTHTOKEN"), "NGROK_AUTHTOKEN environment variable not set")
@unittest.skipIf("NGROK_API_KEY" not in os.environ, "NGROK_API_KEY environment variable not set")
@unittest.skipIf("NGROK_TCP_EDGE" not in os.environ, "NGROK_TCP_EDGE environment variable not set")
@unittest.skipIf("NGROK_TCP_EDGE_ENDPOINT" not in os.environ,
"NGROK_TCP_EDGE_ENDPOINT environment variable not set")
def test_ngrok_v3_edge_tcp_tunnel_definition(self):
# GIVEN
config = {
"tunnels": {
"edge-tcp-tunnel": {
"addr": "22",
"labels": [
f"edge={os.environ['NGROK_TCP_EDGE']}",
]
}
}
}
config_path = os.path.join(self.config_dir, "config_v3_2.yml")
installer.install_default_config(config_path, config, ngrok_version="v3")
pyngrok_config = self.copy_with_updates(self.pyngrok_config_v3, config_path=config_path,
auth_token=os.environ["NGROK_AUTHTOKEN"],
api_key=os.environ["NGROK_API_KEY"])

# WHEN
edge_tcp_tunnel = ngrok.connect(name="edge-tcp-tunnel", pyngrok_config=pyngrok_config)
tunnels = sorted(ngrok.get_tunnels(pyngrok_config=pyngrok_config), key=lambda x: x.proto)

# THEN
self.assertEqual(edge_tcp_tunnel.name, "edge-tcp-tunnel")
self.assertEqual(edge_tcp_tunnel.config["addr"],
f"tcp://localhost:{config['tunnels']['edge-tcp-tunnel']['addr']}")
self.assertTrue(edge_tcp_tunnel.config["addr"].startswith("tcp://"))
self.assertEqual(edge_tcp_tunnel.proto, "tcp")
self.assertEqual(edge_tcp_tunnel.public_url, os.environ["NGROK_TCP_EDGE_ENDPOINT"])
self.assertEqual(len(tunnels), 2)
self.assertEqual(tunnels[0].name, "edge-http-tunnel")
self.assertEqual(len(tunnels), 1)
self.assertEqual(tunnels[0].name, "edge-tcp-tunnel")
self.assertEqual(tunnels[0].config["addr"],
f"http://localhost:{config['tunnels']['edge-http-tunnel']['addr']}")
self.assertTrue(tunnels[0].config["addr"].startswith("http://"))
self.assertEqual(tunnels[0].proto, "https")
self.assertEqual(tunnels[0].public_url, os.environ["NGROK_HTTP_EDGE_ENDPOINT"])
self.assertEqual(tunnels[1].name, "edge-tcp-tunnel")
self.assertEqual(tunnels[1].config["addr"],
f"tcp://localhost:{config['tunnels']['edge-tcp-tunnel']['addr']}")
self.assertTrue(tunnels[1].config["addr"].startswith("tcp://"))
self.assertEqual(tunnels[1].proto, "tcp")
self.assertTrue(tunnels[1].public_url, os.environ["NGROK_TCP_EDGE_ENDPOINT"])
self.assertTrue(tunnels[0].config["addr"].startswith("tcp://"))
self.assertEqual(tunnels[0].proto, "tcp")
self.assertTrue(tunnels[0].public_url, os.environ["NGROK_TCP_EDGE_ENDPOINT"])

@unittest.skipIf(not os.environ.get("NGROK_AUTHTOKEN"), "NGROK_AUTHTOKEN environment variable not set")
@unittest.skipIf("NGROK_API_KEY" not in os.environ, "NGROK_API_KEY environment variable not set")
@unittest.skipIf("NGROK_TLS_EDGE" not in os.environ, "NGROK_TLS_EDGE environment variable not set")
@unittest.skipIf("NGROK_TLS_EDGE_ENDPOINT" not in os.environ,
"NGROK_TLS_EDGE_ENDPOINT environment variable not set")
def test_ngrok_v3_edge_tls_tunnel_definition(self):
# GIVEN
config = {
"tunnels": {
"edge-tls-tunnel": {
"addr": "443",
"labels": [
f"edge={os.environ['NGROK_TLS_EDGE']}",
]
}
}
}
config_path = os.path.join(self.config_dir, "config_v3_2.yml")
installer.install_default_config(config_path, config, ngrok_version="v3")
pyngrok_config = self.copy_with_updates(self.pyngrok_config_v3, config_path=config_path,
auth_token=os.environ["NGROK_AUTHTOKEN"],
api_key=os.environ["NGROK_API_KEY"])

# WHEN
edge_tls_tunnel = ngrok.connect(name="edge-tls-tunnel", pyngrok_config=pyngrok_config)
tunnels = sorted(ngrok.get_tunnels(pyngrok_config=pyngrok_config), key=lambda x: x.proto)

# THEN
self.assertEqual(edge_tls_tunnel.name, "edge-tls-tunnel")
self.assertEqual(edge_tls_tunnel.config["addr"],
f"http://localhost:{config['tunnels']['edge-tls-tunnel']['addr']}")
self.assertTrue(edge_tls_tunnel.config["addr"].startswith("https://"))
self.assertEqual(edge_tls_tunnel.proto, "tls")
self.assertEqual(edge_tls_tunnel.public_url, os.environ["NGROK_TLS_EDGE_ENDPOINT"])
self.assertEqual(len(tunnels), 1)
self.assertEqual(tunnels[0].name, "edge-tls-tunnel")
self.assertEqual(tunnels[0].config["addr"],
f"http://localhost:{config['tunnels']['edge-tls-tunnel']['addr']}")
self.assertTrue(tunnels[0].config["addr"].startswith("https://"))
self.assertEqual(tunnels[0].proto, "tls")
self.assertEqual(tunnels[0].public_url, os.environ["NGROK_TLS_EDGE_ENDPOINT"])

@unittest.skipIf(not os.environ.get("NGROK_AUTHTOKEN"), "NGROK_AUTHTOKEN environment variable not set")
@unittest.skipIf("NGROK_HTTP_EDGE" not in os.environ, "NGROK_HTTP_EDGE environment variable not set")
Expand Down

0 comments on commit c05fce6

Please sign in to comment.