1 // Copyright 2018 The Fuchsia Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <limits.h>
6 #include <ddk/device.h>
7 #include <unittest/unittest.h>
8
9 extern zx_device_t* ddk_test_dev;
10
11 static const char* TEST_STRING = "testing 1 2 3";
12
add_metadata_test(void)13 static bool add_metadata_test(void) {
14 char buffer[32] = {};
15 zx_status_t status;
16 size_t actual;
17
18 BEGIN_TEST;
19
20 status = device_get_metadata(ddk_test_dev, 1, buffer,sizeof(buffer), &actual);
21 ASSERT_EQ(status, ZX_ERR_NOT_FOUND, "device_get_metadata did not return ZX_ERR_NOT_FOUND");
22
23 status = device_add_metadata(ddk_test_dev, 1, TEST_STRING, strlen(TEST_STRING) + 1);
24 ASSERT_EQ(status, ZX_OK, "device_add_metadata failed");
25
26 status = device_get_metadata(ddk_test_dev, 1, buffer, sizeof(buffer), &actual);
27 ASSERT_EQ(status, ZX_OK, "device_get_metadata failed");
28 ASSERT_EQ(actual, strlen(TEST_STRING) + 1, "");
29 ASSERT_EQ(strcmp(buffer, TEST_STRING), 0, "");
30
31 END_TEST;
32 }
33
publish_metadata_test(void)34 static bool publish_metadata_test(void) {
35 char buffer[32] = {};
36 zx_status_t status;
37 size_t actual;
38
39 BEGIN_TEST;
40 // This should fail since the path does not match us or our potential children.
41 status = device_publish_metadata(ddk_test_dev, "/dev/misc/sysinfo", 2, TEST_STRING,
42 strlen(TEST_STRING) + 1);
43 ASSERT_EQ(status, ZX_ERR_ACCESS_DENIED, "");
44
45 // We are allowed to add metadata to own path.
46 status = device_publish_metadata(ddk_test_dev, "/dev/test/test/ddk-test", 2, TEST_STRING,
47 strlen(TEST_STRING) + 1);
48 ASSERT_EQ(status, ZX_OK, "");
49
50 status = device_get_metadata(ddk_test_dev, 2, buffer, sizeof(buffer), &actual);
51 ASSERT_EQ(status, ZX_OK, "device_get_metadata failed");
52 ASSERT_EQ(actual, strlen(TEST_STRING) + 1, "");
53 ASSERT_EQ(strcmp(buffer, TEST_STRING), 0, "");
54
55 // We are allowed to add metadata to our potential children.
56 status = device_publish_metadata(ddk_test_dev, "/dev/test/test/ddk-test/child", 2, TEST_STRING,
57 strlen(TEST_STRING) + 1);
58 ASSERT_EQ(status, ZX_OK, "");
59
60 END_TEST;
61 }
62
63 BEGIN_TEST_CASE(metadata_tests)
64 RUN_TEST(add_metadata_test)
65 RUN_TEST(publish_metadata_test)
66 END_TEST_CASE(metadata_tests)
67
68 struct test_case_element* test_case_ddk_metadata = TEST_CASE_ELEMENT(metadata_tests);
69