37
37
arguments = ["test-df" ],
38
38
compartment_id = "ocid1.compartment.oc1..<unique_ocid>" ,
39
39
display_name = "test-df" ,
40
- driver_shape = "VM.Standard2.1 " ,
40
+ driver_shape = "VM.Standard.E4.Flex " ,
41
41
driver_shape_config = {"memory_in_gbs" : 1 , "ocpus" : 16 },
42
- executor_shape = "VM.Standard2.1 " ,
42
+ executor_shape = "VM.Standard.E4.Flex " ,
43
43
executor_shape_config = {"memory_in_gbs" : 1 , "ocpus" : 16 },
44
44
file_uri = "oci://test_bucket@test_namespace/test-dataflow/test-dataflow.py" ,
45
45
num_executors = 1 ,
@@ -124,7 +124,7 @@ def test_create_delete(self, mock_to_dict, mock_client):
124
124
df .lifecycle_state
125
125
== oci .data_flow .models .Application .LIFECYCLE_STATE_DELETED
126
126
)
127
- assert len (df .to_yaml ()) == 557
127
+ assert len (df .to_yaml ()) == 567
128
128
129
129
def test_create_df_app_with_default_display_name (
130
130
self ,
@@ -433,8 +433,8 @@ def test_create_from_id(self, mock_from_ocid):
433
433
mock_from_ocid .return_value = Application (** SAMPLE_PAYLOAD )
434
434
df = DataFlow .from_id ("ocid1.datasciencejob.oc1.iad.<unique_ocid>" )
435
435
assert df .name == "test-df"
436
- assert df .driver_shape == "VM.Standard2.1 "
437
- assert df .executor_shape == "VM.Standard2.1 "
436
+ assert df .driver_shape == "VM.Standard.E4.Flex "
437
+ assert df .executor_shape == "VM.Standard.E4.Flex "
438
438
assert df .private_endpoint_id == "test_private_endpoint"
439
439
440
440
assert (
@@ -454,7 +454,7 @@ def test_create_from_id(self, mock_from_ocid):
454
454
def test_to_and_from_dict (self , df ):
455
455
df_dict = df .to_dict ()
456
456
assert df_dict ["spec" ]["numExecutors" ] == 2
457
- assert df_dict ["spec" ]["driverShape" ] == "VM.Standard2.1 "
457
+ assert df_dict ["spec" ]["driverShape" ] == "VM.Standard.E4.Flex "
458
458
assert df_dict ["spec" ]["logsBucketUri" ] == "oci://test_bucket@test_namespace/"
459
459
assert df_dict ["spec" ]["privateEndpointId" ] == "test_private_endpoint"
460
460
assert df_dict ["spec" ]["driverShapeConfig" ] == {"memoryInGBs" : 1 , "ocpus" : 16 }
@@ -482,6 +482,51 @@ def test_to_and_from_dict(self, df):
482
482
assert df3_dict ["spec" ]["sparkVersion" ] == "3.2.1"
483
483
assert df3_dict ["spec" ]["numExecutors" ] == 2
484
484
485
+ def test_shape_and_details (self , mock_to_dict , mock_client , df ):
486
+ df .with_driver_shape (
487
+ "VM.Standard2.1"
488
+ ).with_executor_shape (
489
+ "VM.Standard.E4.Flex"
490
+ )
491
+
492
+ rt = (
493
+ DataFlowRuntime ()
494
+ .with_script_uri (SAMPLE_PAYLOAD ["file_uri" ])
495
+ .with_archive_uri (SAMPLE_PAYLOAD ["archive_uri" ])
496
+ .with_custom_conda (
497
+ "oci://my_bucket@my_namespace/conda_environments/cpu/PySpark 3.0 and Data Flow/5.0/pyspark30_p37_cpu_v5"
498
+ )
499
+ .with_overwrite (True )
500
+ )
501
+
502
+ with pytest .raises (
503
+ ValueError ,
504
+ match = "`executor_shape` and `driver_shape` must be from the same shape family."
505
+ ):
506
+ with patch .object (DataFlowApp , "client" , mock_client ):
507
+ with patch .object (DataFlowApp , "to_dict" , mock_to_dict ):
508
+ df .create (rt )
509
+
510
+ df .with_driver_shape (
511
+ "VM.Standard2.1"
512
+ ).with_driver_shape_config (
513
+ memory_in_gbs = SAMPLE_PAYLOAD ["driver_shape_config" ]["memory_in_gbs" ],
514
+ ocpus = SAMPLE_PAYLOAD ["driver_shape_config" ]["ocpus" ],
515
+ ).with_executor_shape (
516
+ "VM.Standard2.16"
517
+ ).with_executor_shape_config (
518
+ memory_in_gbs = SAMPLE_PAYLOAD ["executor_shape_config" ]["memory_in_gbs" ],
519
+ ocpus = SAMPLE_PAYLOAD ["executor_shape_config" ]["ocpus" ],
520
+ )
521
+
522
+ with pytest .raises (
523
+ ValueError ,
524
+ match = "Shape config is not required for non flex shape from user end."
525
+ ):
526
+ with patch .object (DataFlowApp , "client" , mock_client ):
527
+ with patch .object (DataFlowApp , "to_dict" , mock_to_dict ):
528
+ df .create (rt )
529
+
485
530
486
531
class TestDataFlowNotebookRuntime :
487
532
@pytest .mark .skipif (
0 commit comments