Add additional test for attp_build_value_cmd

focusing on security (OOB)

Bug: 295887535
Bug: 315127634
Test: m com.android.btservices
Test: atest net_test_stack_gatt
Ignore-AOSP-First: security
Flag: EXEMPT, Test
Change-Id: I63071c6166b7ca0f3b90a8feadb9133887e26d3a
diff --git a/system/stack/test/gatt/stack_gatt_test.cc b/system/stack/test/gatt/stack_gatt_test.cc
index fe1f474..1466a9c 100644
--- a/system/stack/test/gatt/stack_gatt_test.cc
+++ b/system/stack/test/gatt/stack_gatt_test.cc
@@ -333,3 +333,50 @@
                                           0x1234, 3, (uint8_t*)"abc");
   }
 }
+
+static void attp_build_value_cmd_small_payload_size(uint8_t op_code) {
+  // payload size too small
+  uint16_t offset_0 = 0;
+  uint16_t handle = 0x1;
+  uint16_t len = 0;
+  uint8_t* p_data = nullptr;
+  uint16_t test_payload_size = gatt_min_value_cmd_size.at(op_code) - 1;
+
+  ASSERT_TRUE(gatt_min_value_cmd_size.find(op_code) !=
+              gatt_min_value_cmd_size.end());
+  test_payload_size = gatt_min_value_cmd_size.at(op_code) - 1;
+
+  BT_HDR* ret = bluetooth::legacy::testing::attp_build_value_cmd(
+      test_payload_size, op_code, handle, offset_0, len, p_data);
+
+  ASSERT_EQ(ret, nullptr);
+}
+
+TEST_F(StackGattTest,
+       attp_build_value_cmd_test_payload_size_less_than_mimimal) {
+  for (auto it = gatt_min_value_cmd_size.begin();
+       it != gatt_min_value_cmd_size.end(); it++) {
+    attp_build_value_cmd_small_payload_size(it->first);
+  }
+}
+
+TEST_F(StackGattTest, attp_build_value_cmd_read_by_type_test_long_data) {
+  // p_data too large and does not fit in pair_len
+  // only for GATT_RSP_READ_BY_TYPE
+  uint16_t offset_0 = 0;
+  uint16_t handle = 0x1;
+  const uint8_t op_code = GATT_RSP_READ_BY_TYPE;
+
+  const int data_size = 255;
+  uint16_t payload_size = data_size + 4;
+
+  uint8_t data[data_size];
+
+  for (int i = 0; i < data_size; i++) {
+    data[i] = 'A';
+  }
+
+  BT_HDR* ret = bluetooth::legacy::testing::attp_build_value_cmd(
+      payload_size, op_code, handle, offset_0, data_size, data);
+  ASSERT_EQ(ret, nullptr);
+}