[LC] LC Scenes Integration Tests (#34448)

* Added test for scenes integration to Level control cluster

* Removed interaction between OnOff and Level control from the test

* Added new test to test plan

* Update src/app/tests/suites/certification/Test_TC_LVL_9_1.yaml

Co-authored-by: C Freeman <cecille@google.com>

* Added cleanup

---------

Co-authored-by: C Freeman <cecille@google.com>
diff --git a/src/app/tests/suites/certification/Test_TC_LVL_9_1.yaml b/src/app/tests/suites/certification/Test_TC_LVL_9_1.yaml
new file mode 100644
index 0000000..36da124
--- /dev/null
+++ b/src/app/tests/suites/certification/Test_TC_LVL_9_1.yaml
@@ -0,0 +1,264 @@
+# Copyright (c) 2024 Project CHIP Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+name: 4.2.4. [TC-LVL-9.1] Scenes Management Cluster Interaction (DUT as Server)
+
+PICS:
+    - LVL.S
+    - S.S
+
+config:
+    nodeId: 0x12344321
+    cluster: "Scenes Management"
+    endpoint: 1
+    G1:
+        type: group_id
+        defaultValue: 0x0001
+
+tests:
+    - label: "Wait for the commissioned device to be retrieved"
+      cluster: "DelayCommands"
+      command: "WaitForCommissionee"
+      arguments:
+          values:
+              - name: "nodeId"
+                value: nodeId
+
+    - label:
+          "Step 0a :TH sends KeySetWrite command in the GroupKeyManagement
+          cluster to DUT using a key that is pre-installed on the TH.
+          GroupKeySet fields are as follows:"
+      cluster: "Group Key Management"
+      endpoint: 0
+      command: "KeySetWrite"
+      arguments:
+          values:
+              - name: "GroupKeySet"
+                value:
+                    {
+                        GroupKeySetID: 0x01a1,
+                        GroupKeySecurityPolicy: 0,
+                        EpochKey0: "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf",
+                        EpochStartTime0: 1110000,
+                        EpochKey1: "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf",
+                        EpochStartTime1: 1110001,
+                        EpochKey2: "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf",
+                        EpochStartTime2: 1110002,
+                    }
+
+    - label:
+          "Step 0b: TH binds GroupIds 0x0001 and 0x0002 with GroupKeySetID
+          0x01a1 in the GroupKeyMap attribute list on GroupKeyManagement cluster
+          by writing the GroupKeyMap attribute with two entries as follows:"
+      cluster: "Group Key Management"
+      endpoint: 0
+      command: "writeAttribute"
+      attribute: "GroupKeyMap"
+      arguments:
+          value: [{ FabricIndex: 1, GroupId: G1, GroupKeySetID: 0x01a1 }]
+
+    - label: "Step 0c: TH sends a RemoveAllGroups command to DUT."
+      cluster: "Groups"
+      endpoint: endpoint
+      command: "RemoveAllGroups"
+
+    - label:
+          "Step 1a: TH sends a AddGroup command to DUT with the GroupID field
+          set to G1."
+      cluster: "Groups"
+      command: "AddGroup"
+      arguments:
+          values:
+              - name: "GroupID"
+                value: G1
+              - name: "GroupName"
+                value: "Group1"
+      response:
+          values:
+              - name: "Status"
+                value: 0
+              - name: "GroupID"
+                value: G1
+
+    - label:
+          "Step 1b: TH sends a RemoveAllScenes command to DUT with the GroupID
+          field set to G1."
+      command: "RemoveAllScenes"
+      arguments:
+          values:
+              - name: "GroupID"
+                value: G1
+      response:
+          values:
+              - name: "Status"
+                value: 0x00
+              - name: "GroupID"
+                value: G1
+    - label:
+          "Step 1c: TH sends a GetSceneMembership command to DUT with the
+          GroupID field set to G1."
+      command: "GetSceneMembership"
+      arguments:
+          values:
+              - name: "GroupID"
+                value: G1
+      response:
+          values:
+              - name: "Status"
+                value: 0x00
+              - name: "GroupID"
+                value: G1
+              - name: "SceneList"
+                value: []
+
+    - label:
+          "Step 2a: TH sends a MoveToLevel command to DUT, with Level =0 and
+          TransitionTime =0 (immediate)"
+      cluster: "Level Control"
+      command: "MoveToLevel"
+      arguments:
+          values:
+              - name: "Level"
+                value: 0
+              - name: "TransitionTime"
+                value: 0
+              - name: "OptionsMask"
+                value: 1
+              - name: "OptionsOverride"
+                value: 1
+
+    - label: "Step 2b: TH reads the MinLevel attribute from the DUT"
+      cluster: "Level Control"
+      command: "readAttribute"
+      attribute: "MinLevel"
+      response:
+          saveAs: MinLevelValue
+          constraints:
+              type: int8u
+
+    - label: "Step 2c: TH reads the CurrentLevel attribute from DUT"
+      cluster: "Level Control"
+      command: "readAttribute"
+      attribute: "CurrentLevel"
+      response:
+          value: MinLevelValue
+
+    - label:
+          "Step 3: TH sends a StoreScene command to DUT with the GroupID field
+          set to G1 and the SceneID field set to 0x01."
+      command: "StoreScene"
+      arguments:
+          values:
+              - name: "GroupID"
+                value: G1
+              - name: "SceneID"
+                value: 0x01
+      response:
+          values:
+              - name: "Status"
+                value: 0x00
+              - name: "GroupID"
+                value: G1
+              - name: "SceneID"
+                value: 0x01
+
+    - label: "Step 4: TH sends a AddScene command to DUT with the GroupID field
+          set to G1, the SceneID field set to 0x02, the TransitionTime field set
+          to 0 and the ExtensionFieldSets set to: '[{ ClusterID: 0x0008,
+          AttributeValueList: [{ AttributeID: 0x0000, ValueUnsigned8: 0x64 }]}]'
+          "
+      command: "AddScene"
+      arguments:
+          values:
+              - name: "GroupID"
+                value: G1
+              - name: "SceneID"
+                value: 0x02
+              - name: "TransitionTime"
+                value: 0
+              - name: "SceneName"
+                value: "Scene1"
+              - name: "ExtensionFieldSets"
+                value:
+                    [
+                        {
+                            ClusterID: 0x0008,
+                            AttributeValueList:
+                                [{ AttributeID: 0x0000, ValueUnsigned8: 0x64 }],
+                        },
+                    ]
+      response:
+          values:
+              - name: "Status"
+                value: 0x00
+              - name: "GroupID"
+                value: G1
+              - name: "SceneID"
+                value: 0x02
+
+    - label:
+          "Step 5a: TH sends a RecallScene command to DUT with the GroupID field
+          set to G1 and the SceneID field set to 0x02."
+      command: "RecallScene"
+      arguments:
+          values:
+              - name: "GroupID"
+                value: G1
+              - name: "SceneID"
+                value: 0x02
+
+    - label: "Step 5b: TH reads the CurrentLevel attribute from DUT"
+      cluster: "Level Control"
+      command: "readAttribute"
+      attribute: "CurrentLevel"
+      response:
+          value: 0x64
+
+    - label:
+          "Step 6a: TH sends a RecallScene command to DUT with the GroupID field
+          set to G1 and the SceneID field set to 0x01."
+      command: "RecallScene"
+      arguments:
+          values:
+              - name: "GroupID"
+                value: G1
+              - name: "SceneID"
+                value: 0x01
+
+    - label: "Step 6c: TH reads the CurrentLevel attribute from DUT"
+      cluster: "Level Control"
+      command: "readAttribute"
+      attribute: "CurrentLevel"
+      response:
+          value: MinLevelValue
+
+    - label:
+          "Cleanup: TH sends a RemoveAllScenes command to DUT with the GroupID
+          field set to G1."
+      command: "RemoveAllScenes"
+      arguments:
+          values:
+              - name: "GroupID"
+                value: G1
+      response:
+          values:
+              - name: "Status"
+                value: 0x00
+              - name: "GroupID"
+                value: G1
+
+    - label: "Cleanup: TH sends a RemoveAllGroups command to DUT."
+      cluster: "Groups"
+      endpoint: endpoint
+      command: "RemoveAllGroups"
diff --git a/src/app/tests/suites/ciTests.json b/src/app/tests/suites/ciTests.json
index 44cfcd1..a96ef4a 100644
--- a/src/app/tests/suites/ciTests.json
+++ b/src/app/tests/suites/ciTests.json
@@ -83,7 +83,8 @@
         "Test_TC_LVL_4_1",
         "Test_TC_LVL_5_1",
         "Test_TC_LVL_6_1",
-        "Test_TC_LVL_7_1"
+        "Test_TC_LVL_7_1",
+        "Test_TC_LVL_9_1"
     ],
     "LocalizationConfiguration": [],
     "TimeFormatLocalization": ["Test_TC_LTIME_1_2", "Test_TC_LTIME_3_1"],