1 /**
2 * Copyright (C) Mellanox Technologies Ltd. 2001-2015.  ALL RIGHTS RESERVED.
3 *
4 * See file LICENSE for terms.
5 */
6 
7 #include "ucp_test.h"
8 extern "C" {
9 #include <ucs/sys/sys.h>
10 }
11 
12 
13 class test_ucp_context : public ucp_test {
14 public:
get_ctx_params()15     static ucp_params_t get_ctx_params() {
16         ucp_params_t params = ucp_test::get_ctx_params();
17         params.features |= UCP_FEATURE_TAG | UCP_FEATURE_WAKEUP;
18         return params;
19     }
20 };
21 
UCS_TEST_P(test_ucp_context,minimal_field_mask)22 UCS_TEST_P(test_ucp_context, minimal_field_mask) {
23     ucs::handle<ucp_config_t*> config;
24     UCS_TEST_CREATE_HANDLE(ucp_config_t*, config, ucp_config_release,
25                            ucp_config_read, NULL, NULL);
26 
27     ucs::handle<ucp_context_h> ucph;
28     ucs::handle<ucp_worker_h> worker;
29 
30     {
31         /* Features ONLY */
32         ucp_params_t params;
33         VALGRIND_MAKE_MEM_UNDEFINED(&params, sizeof(params));
34         params.field_mask = UCP_PARAM_FIELD_FEATURES;
35         params.features   = get_ctx_params().features;
36 
37         UCS_TEST_CREATE_HANDLE(ucp_context_h, ucph, ucp_cleanup,
38                                ucp_init, &params, config.get());
39     }
40 
41     {
42         /* Empty set */
43         ucp_worker_params_t params;
44         VALGRIND_MAKE_MEM_UNDEFINED(&params, sizeof(params));
45         params.field_mask = 0;
46 
47         UCS_TEST_CREATE_HANDLE(ucp_worker_h, worker, ucp_worker_destroy,
48                                ucp_worker_create, ucph.get(), &params);
49     }
50 }
51 
52 UCP_INSTANTIATE_TEST_CASE_TLS(test_ucp_context, all, "all")
53 
54 class test_ucp_aliases : public test_ucp_context {
55 };
56 
UCS_TEST_P(test_ucp_aliases,aliases)57 UCS_TEST_P(test_ucp_aliases, aliases) {
58     create_entity();
59 }
60 
61 UCP_INSTANTIATE_TEST_CASE_TLS(test_ucp_aliases, rcv, "rc_v")
62 UCP_INSTANTIATE_TEST_CASE_TLS(test_ucp_aliases, rcx, "rc_x")
63 UCP_INSTANTIATE_TEST_CASE_TLS(test_ucp_aliases, ud, "ud")
64 UCP_INSTANTIATE_TEST_CASE_TLS(test_ucp_aliases, ud_mlx5, "ud_mlx5")
65 UCP_INSTANTIATE_TEST_CASE_TLS(test_ucp_aliases, ugni, "ugni")
66 UCP_INSTANTIATE_TEST_CASE_TLS(test_ucp_aliases, shm, "shm")
67 
68 
69 class test_ucp_version : public test_ucp_context {
70 };
71 
UCS_TEST_P(test_ucp_version,wrong_api_version)72 UCS_TEST_P(test_ucp_version, wrong_api_version) {
73 
74     ucs::handle<ucp_config_t*> config;
75     UCS_TEST_CREATE_HANDLE(ucp_config_t*, config, ucp_config_release,
76                            ucp_config_read, NULL, NULL);
77 
78     ucp_params_t params = get_ctx_params();
79     ucp_context_h ucph;
80     ucs_status_t status;
81     size_t warn_count;
82     {
83         scoped_log_handler slh(hide_warns_logger);
84         warn_count = m_warnings.size();
85         status = ucp_init_version(99, 99, &params, config.get(), &ucph);
86     }
87     if (status != UCS_OK) {
88         ADD_FAILURE() << "Failed to create UCP with wrong version";
89     } else {
90         if (m_warnings.size() == warn_count) {
91             ADD_FAILURE() << "Missing wrong version warning";
92         }
93         ucp_cleanup(ucph);
94     }
95 }
96 
UCS_TEST_P(test_ucp_version,version_string)97 UCS_TEST_P(test_ucp_version, version_string) {
98 
99     unsigned major_version, minor_version, release_number;
100 
101     ucp_get_version(&major_version, &minor_version, &release_number);
102 
103     char buffer[256];
104     snprintf(buffer, sizeof(buffer), "%d.%d.%d", major_version, minor_version,
105              release_number);
106 
107     EXPECT_EQ(std::string(buffer), std::string(ucp_get_version_string()));
108 }
109 
110 UCP_INSTANTIATE_TEST_CASE_TLS(test_ucp_version, all, "all")
111