Skip to content

Commit b552de7

Browse files
committed
test: add unit tests for gcs fault tolerance
Signed-off-by: kramaranya <kramaranya15@gmail.com>
1 parent 8b1fbbd commit b552de7

File tree

2 files changed

+95
-1
lines changed

2 files changed

+95
-1
lines changed

src/codeflare_sdk/ray/cluster/test_build_ray_cluster.py

+44-1
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313
# limitations under the License.
1414
from collections import namedtuple
1515
import sys
16-
from .build_ray_cluster import gen_names, update_image
16+
from .build_ray_cluster import gen_names, update_image, build_ray_cluster
1717
import uuid
18+
from codeflare_sdk.ray.cluster.cluster import ClusterConfiguration, Cluster
1819

1920

2021
def test_gen_names_with_name(mocker):
@@ -65,3 +66,45 @@ def test_update_image_without_supported_python_version(mocker):
6566

6667
# Assert that no image was set since the Python version is not supported
6768
assert image is None
69+
70+
71+
def test_build_ray_cluster_with_gcs_ft(mocker):
72+
mocker.patch("kubernetes.config.load_kube_config", return_value="ignore")
73+
mocker.patch("kubernetes.client.CustomObjectsApi.list_namespaced_custom_object")
74+
75+
cluster = Cluster(
76+
ClusterConfiguration(
77+
name="test",
78+
namespace="ns",
79+
enable_gcs_ft=True,
80+
redis_address="redis:6379",
81+
redis_password_secret={"name": "redis-password-secret", "key": "password"},
82+
external_storage_namespace="new-ns",
83+
)
84+
)
85+
86+
mocker.patch("codeflare_sdk.ray.cluster.build_ray_cluster.config_check")
87+
mocker.patch(
88+
"codeflare_sdk.ray.cluster.build_ray_cluster.get_api_client", return_value=None
89+
)
90+
mocker.patch(
91+
"codeflare_sdk.ray.cluster.build_ray_cluster.update_image", return_value=None
92+
)
93+
94+
resource = build_ray_cluster(cluster)
95+
96+
assert "spec" in resource
97+
assert "gcsFaultToleranceOptions" in resource["spec"]
98+
99+
gcs_ft_options = resource["spec"]["gcsFaultToleranceOptions"]
100+
101+
assert gcs_ft_options["redisAddress"] == "redis:6379"
102+
assert gcs_ft_options["externalStorageNamespace"] == "new-ns"
103+
assert (
104+
gcs_ft_options["redisPassword"]["valueFrom"]["secretKeyRef"]["name"]
105+
== "redis-password-secret"
106+
)
107+
assert (
108+
gcs_ft_options["redisPassword"]["valueFrom"]["secretKeyRef"]["key"]
109+
== "password"
110+
)

src/codeflare_sdk/ray/cluster/test_config.py

+51
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,57 @@ def test_cluster_config_deprecation_conversion(mocker):
153153
assert config.worker_cpu_limits == 2
154154

155155

156+
def test_gcs_fault_tolerance_config_validation():
157+
config = ClusterConfiguration(
158+
name="test",
159+
namespace="ns",
160+
enable_gcs_ft=True,
161+
redis_address="redis:6379",
162+
redis_password_secret={"name": "redis-password-secret", "key": "password"},
163+
external_storage_namespace="new-ns",
164+
)
165+
166+
assert config.enable_gcs_ft is True
167+
assert config.redis_address == "redis:6379"
168+
assert config.redis_password_secret == {
169+
"name": "redis-password-secret",
170+
"key": "password",
171+
}
172+
assert config.external_storage_namespace == "new-ns"
173+
174+
try:
175+
ClusterConfiguration(name="test", namespace="ns", enable_gcs_ft=True)
176+
except ValueError as e:
177+
assert str(e) in "redis_address must be provided when enable_gcs_ft is True"
178+
179+
try:
180+
ClusterConfiguration(
181+
name="test",
182+
namespace="ns",
183+
enable_gcs_ft=True,
184+
redis_address="redis:6379",
185+
redis_password_secret={"secret"},
186+
)
187+
except ValueError as e:
188+
assert (
189+
str(e)
190+
in "redis_password_secret must be a dictionary with 'name' and 'key' fields"
191+
)
192+
193+
try:
194+
ClusterConfiguration(
195+
name="test",
196+
namespace="ns",
197+
enable_gcs_ft=True,
198+
redis_address="redis:6379",
199+
redis_password_secret={"wrong": "format"},
200+
)
201+
except ValueError as e:
202+
assert (
203+
str(e) in "redis_password_secret must contain both 'name' and 'key' fields"
204+
)
205+
206+
156207
# Make sure to always keep this function last
157208
def test_cleanup():
158209
os.remove(f"{aw_dir}test-all-params.yaml")

0 commit comments

Comments
 (0)