blob: bede794ea9e4006f7e9c713daf98b124cb60852a [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
Michal Vaskoba9f3582023-02-22 10:26:32 +010015#define _GNU_SOURCE
16
Radek Krejci2e32e392017-05-26 13:25:46 +020017#include <pthread.h>
Radek Krejci2e32e392017-05-26 13:25:46 +020018#include <stdio.h>
Michal Vaskob83a3fa2021-05-26 09:53:42 +020019#include <stdlib.h>
Radek Krejci2e32e392017-05-26 13:25:46 +020020#include <string.h>
21#include <sys/types.h>
22#include <sys/wait.h>
Michal Vaskob83a3fa2021-05-26 09:53:42 +020023#include <unistd.h>
Radek Krejci2e32e392017-05-26 13:25:46 +020024
25#include <libyang/libyang.h>
26
27#include <session_client.h>
Jan Kundrátcf15d6c2017-10-26 18:07:56 +020028#include "tests/config.h"
Radek Krejci2e32e392017-05-26 13:25:46 +020029
30#define nc_assert(cond) if (!(cond)) { fprintf(stderr, "assert failed (%s:%d)\n", __FILE__, __LINE__); exit(1); }
31
32static void *
33thread(void *arg)
34{
35 /* default search path is NULL */
36 nc_assert(nc_client_get_schema_searchpath() == NULL);
37
38 /* use the context shared from the main thread */
39 nc_client_set_thread_context(arg);
40
41 /* check that we have now the search path set in main thread */
42 nc_assert(strcmp(nc_client_get_schema_searchpath(), "/tmp") == 0);
43 /* and change it to check it later in main thread */
44 nc_assert(nc_client_set_schema_searchpath("/etc") == 0)
45
46 return NULL;
47}
48
49int
50main(void)
51{
52 void *arg;
53 pthread_t t;
54 int r;
55
Radek Krejci2e32e392017-05-26 13:25:46 +020056 /*
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}