3737 arguments = ["test-df" ],
3838 compartment_id = "ocid1.compartment.oc1..<unique_ocid>" ,
3939 display_name = "test-df" ,
40- driver_shape = "VM.Standard2.1 " ,
40+ driver_shape = "VM.Standard.E4.Flex " ,
4141 driver_shape_config = {"memory_in_gbs" : 1 , "ocpus" : 16 },
42- executor_shape = "VM.Standard2.1 " ,
42+ executor_shape = "VM.Standard.E4.Flex " ,
4343 executor_shape_config = {"memory_in_gbs" : 1 , "ocpus" : 16 },
4444 file_uri = "oci://test_bucket@test_namespace/test-dataflow/test-dataflow.py" ,
4545 num_executors = 1 ,
@@ -124,7 +124,7 @@ def test_create_delete(self, mock_to_dict, mock_client):
124124 df .lifecycle_state
125125 == oci .data_flow .models .Application .LIFECYCLE_STATE_DELETED
126126 )
127- assert len (df .to_yaml ()) == 557
127+ assert len (df .to_yaml ()) == 567
128128
129129 def test_create_df_app_with_default_display_name (
130130 self ,
@@ -433,8 +433,8 @@ def test_create_from_id(self, mock_from_ocid):
433433 mock_from_ocid .return_value = Application (** SAMPLE_PAYLOAD )
434434 df = DataFlow .from_id ("ocid1.datasciencejob.oc1.iad.<unique_ocid>" )
435435 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 "
438438 assert df .private_endpoint_id == "test_private_endpoint"
439439
440440 assert (
@@ -454,7 +454,7 @@ def test_create_from_id(self, mock_from_ocid):
454454 def test_to_and_from_dict (self , df ):
455455 df_dict = df .to_dict ()
456456 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 "
458458 assert df_dict ["spec" ]["logsBucketUri" ] == "oci://test_bucket@test_namespace/"
459459 assert df_dict ["spec" ]["privateEndpointId" ] == "test_private_endpoint"
460460 assert df_dict ["spec" ]["driverShapeConfig" ] == {"memoryInGBs" : 1 , "ocpus" : 16 }
@@ -482,6 +482,51 @@ def test_to_and_from_dict(self, df):
482482 assert df3_dict ["spec" ]["sparkVersion" ] == "3.2.1"
483483 assert df3_dict ["spec" ]["numExecutors" ] == 2
484484
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+
485530
486531class TestDataFlowNotebookRuntime :
487532 @pytest .mark .skipif (
0 commit comments