blob: 52ce016b3965a2fb29d084cbe34121e51f6e199c [file] [log] [blame]
Radek Krejci2e32e392017-05-26 13:25:46 +02001/**
2 * \file test_client_thread.c
3 * \author Radek Krejci <rkrejci@cesnet.cz>
4 * \brief libnetconf2 tests - threads functions in client
5 *
6 * Copyright (c) 2017 CESNET, z.s.p.o.
7 *
8 * This source code is licensed under BSD 3-Clause License (the "License").
9 * You may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * https://opensource.org/licenses/BSD-3-Clause
13 */
14
15#include <pthread.h>
16#include <unistd.h>
17#include <stdlib.h>
18#include <stdio.h>
19#include <string.h>
20#include <sys/types.h>
21#include <sys/wait.h>
22
23#include <libyang/libyang.h>
24
25#include <session_client.h>
26#include "config.h"
27
28#define nc_assert(cond) if (!(cond)) { fprintf(stderr, "assert failed (%s:%d)\n", __FILE__, __LINE__); exit(1); }
29
30static void *
31thread(void *arg)
32{
33 /* default search path is NULL */
34 nc_assert(nc_client_get_schema_searchpath() == NULL);
35
36 /* use the context shared from the main thread */
37 nc_client_set_thread_context(arg);
38
39 /* check that we have now the search path set in main thread */
40 nc_assert(strcmp(nc_client_get_schema_searchpath(), "/tmp") == 0);
41 /* and change it to check it later in main thread */
42 nc_assert(nc_client_set_schema_searchpath("/etc") == 0)
43
44 return NULL;
45}
46
47int
48main(void)
49{
50 void *arg;
51 pthread_t t;
52 int r;
53
54 nc_client_init();
55
56 /*
57 * TEST sharing the thread context
58 */
59 nc_assert(nc_client_set_schema_searchpath("/tmp") == 0)
60
61 /* get the context for sharing */
62 arg = nc_client_get_thread_context();
63
64 /* create new thread and provide the context */
65 r = pthread_create(&t, NULL, &thread, arg);
66 nc_assert(r == 0);
67
68 pthread_join(t, NULL);
69
70 /* check the changed search path value from the thread */
71 nc_assert(strcmp(nc_client_get_schema_searchpath(), "/etc") == 0);
72
73 /* cleanup */
74 nc_client_destroy();
75
76 return EXIT_SUCCESS;
77}