Skip to content

Commit 54e90f5

Browse files
authored
RHOAIENG-5344 - E2E test for Ray local interactive (#532)
1 parent b4c55e4 commit 54e90f5

4 files changed

+174
-0
lines changed

Diff for: tests/e2e/local_interactive_sdk_kind_test.py

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
from codeflare_sdk import (
2+
Cluster,
3+
ClusterConfiguration,
4+
TokenAuthentication,
5+
generate_cert,
6+
)
7+
8+
import pytest
9+
import ray
10+
import math
11+
12+
from support import *
13+
14+
15+
@pytest.mark.kind
16+
class TestRayLocalInteractiveOauth:
17+
def setup_method(self):
18+
initialize_kubernetes_client(self)
19+
20+
def teardown_method(self):
21+
delete_namespace(self)
22+
23+
def test_local_interactives(self):
24+
self.setup_method()
25+
create_namespace(self)
26+
create_kueue_resources(self)
27+
self.run_local_interactives()
28+
self.teardown_method()
29+
30+
def run_local_interactives(self):
31+
ray_image = get_ray_image()
32+
33+
cluster_name = "test-ray-cluster-li"
34+
35+
cluster = Cluster(
36+
ClusterConfiguration(
37+
name=cluster_name,
38+
namespace=self.namespace,
39+
num_workers=1,
40+
head_cpus="500m",
41+
head_memory=2,
42+
min_cpus="500m",
43+
max_cpus=1,
44+
min_memory=1,
45+
max_memory=2,
46+
num_gpus=0,
47+
image=ray_image,
48+
write_to_file=True,
49+
verify_tls=False,
50+
)
51+
)
52+
cluster.up()
53+
cluster.wait_ready()
54+
55+
generate_cert.generate_tls_cert(cluster_name, self.namespace)
56+
generate_cert.export_env(cluster_name, self.namespace)
57+
58+
print(cluster.local_client_url())
59+
60+
ray.shutdown()
61+
ray.init(address=cluster.local_client_url(), logging_level="DEBUG")
62+
63+
@ray.remote
64+
def heavy_calculation_part(num_iterations):
65+
result = 0.0
66+
for i in range(num_iterations):
67+
for j in range(num_iterations):
68+
for k in range(num_iterations):
69+
result += math.sin(i) * math.cos(j) * math.tan(k)
70+
return result
71+
72+
@ray.remote
73+
def heavy_calculation(num_iterations):
74+
results = ray.get(
75+
[heavy_calculation_part.remote(num_iterations // 30) for _ in range(30)]
76+
)
77+
return sum(results)
78+
79+
ref = heavy_calculation.remote(3000)
80+
result = ray.get(ref)
81+
assert result == 1789.4644387076714
82+
ray.cancel(ref)
83+
ray.shutdown()
84+
85+
cluster.down()

Diff for: tests/e2e/local_interactive_sdk_oauth_test.py

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
from codeflare_sdk import (
2+
Cluster,
3+
ClusterConfiguration,
4+
TokenAuthentication,
5+
generate_cert,
6+
)
7+
8+
import math
9+
import pytest
10+
import ray
11+
12+
from support import *
13+
14+
15+
@pytest.mark.openshift
16+
class TestRayLocalInteractiveOauth:
17+
def setup_method(self):
18+
initialize_kubernetes_client(self)
19+
20+
def teardown_method(self):
21+
delete_namespace(self)
22+
23+
def test_local_interactives(self):
24+
self.setup_method()
25+
create_namespace(self)
26+
create_kueue_resources(self)
27+
self.run_local_interactives()
28+
self.teardown_method()
29+
30+
def run_local_interactives(self):
31+
ray_image = get_ray_image()
32+
33+
auth = TokenAuthentication(
34+
token=run_oc_command(["whoami", "--show-token=true"]),
35+
server=run_oc_command(["whoami", "--show-server=true"]),
36+
skip_tls=True,
37+
)
38+
auth.login()
39+
40+
cluster_name = "test-ray-cluster-li"
41+
42+
cluster = Cluster(
43+
ClusterConfiguration(
44+
namespace=self.namespace,
45+
name=cluster_name,
46+
num_workers=1,
47+
min_cpus=1,
48+
max_cpus=1,
49+
min_memory=4,
50+
max_memory=4,
51+
num_gpus=0,
52+
image=ray_image,
53+
verify_tls=False,
54+
)
55+
)
56+
cluster.up()
57+
cluster.wait_ready()
58+
59+
generate_cert.generate_tls_cert(cluster_name, self.namespace)
60+
generate_cert.export_env(cluster_name, self.namespace)
61+
62+
ray.shutdown()
63+
ray.init(address=cluster.local_client_url(), logging_level="DEBUG")
64+
65+
@ray.remote
66+
def heavy_calculation_part(num_iterations):
67+
result = 0.0
68+
for i in range(num_iterations):
69+
for j in range(num_iterations):
70+
for k in range(num_iterations):
71+
result += math.sin(i) * math.cos(j) * math.tan(k)
72+
return result
73+
74+
@ray.remote
75+
def heavy_calculation(num_iterations):
76+
results = ray.get(
77+
[heavy_calculation_part.remote(num_iterations // 30) for _ in range(30)]
78+
)
79+
return sum(results)
80+
81+
ref = heavy_calculation.remote(3000)
82+
result = ray.get(ref)
83+
assert result == 1789.4644387076714
84+
ray.cancel(ref)
85+
ray.shutdown()
86+
87+
cluster.down()

Diff for: tests/e2e/mnist_raycluster_sdk_kind_test.py

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def test_mnist_ray_cluster_sdk_kind(self):
2525
create_namespace(self)
2626
create_kueue_resources(self)
2727
self.run_mnist_raycluster_sdk_kind()
28+
self.teardown_method()
2829

2930
def run_mnist_raycluster_sdk_kind(self):
3031
ray_image = get_ray_image()

Diff for: tests/e2e/mnist_raycluster_sdk_oauth_test.py

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def test_mnist_ray_cluster_sdk_auth(self):
2525
create_namespace(self)
2626
create_kueue_resources(self)
2727
self.run_mnist_raycluster_sdk_oauth()
28+
self.teardown_method()
2829

2930
def run_mnist_raycluster_sdk_oauth(self):
3031
ray_image = get_ray_image()

0 commit comments

Comments
 (0)