~ubuntu-branches/ubuntu/precise/libssh/precise

« back to all changes in this revision

Viewing changes to tests/unittests/torture_misc.c

  • Committer: Bazaar Package Importer
  • Author(s): Laurent Bigonville
  • Date: 2011-06-15 15:48:07 UTC
  • mfrom: (1.1.10 upstream) (4.1.12 sid)
  • Revision ID: james.westby@ubuntu.com-20110615154807-3muklcqfftr1vtch
Tags: 0.5.0-2
* debian/patches/0002-Check-for-NULL-pointers-in-string-c.patch:
  Consolidate patch (Should fix previous REJECT)
* Support multiarch spec

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
#include <sys/types.h>
 
3
#ifndef _WIN32
 
4
 
 
5
#define _POSIX_PTHREAD_SEMANTICS
 
6
#include <pwd.h>
 
7
#endif
 
8
 
 
9
#define LIBSSH_STATIC
 
10
#include <libssh/priv.h>
 
11
 
 
12
#include "torture.h"
 
13
#include "misc.c"
 
14
#include "error.c"
 
15
 
 
16
#define TORTURE_TEST_DIR "/usr/local/bin/truc/much/.."
 
17
 
 
18
 
 
19
static void setup(void **state) {
 
20
    ssh_session session = ssh_new();
 
21
    *state = session;
 
22
}
 
23
 
 
24
static void teardown(void **state) {
 
25
    ssh_free(*state);
 
26
}
 
27
 
 
28
static void torture_get_user_home_dir(void **state) {
 
29
#ifndef _WIN32
 
30
    struct passwd *pwd = getpwuid(getuid());
 
31
#endif /* _WIN32 */
 
32
    char *user;
 
33
 
 
34
    (void) state;
 
35
 
 
36
    user = ssh_get_user_home_dir();
 
37
    assert_false(user == NULL);
 
38
#ifndef _WIN32
 
39
    assert_string_equal(user, pwd->pw_dir);
 
40
#endif /* _WIN32 */
 
41
 
 
42
    SAFE_FREE(user);
 
43
}
 
44
 
 
45
static void torture_basename(void **state) {
 
46
    char *path;
 
47
 
 
48
    (void) state;
 
49
 
 
50
    path=ssh_basename(TORTURE_TEST_DIR "/test");
 
51
    assert_true(path != NULL);
 
52
    assert_string_equal(path, "test");
 
53
    SAFE_FREE(path);
 
54
    path=ssh_basename(TORTURE_TEST_DIR "/test/");
 
55
    assert_true(path != NULL);
 
56
    assert_string_equal(path, "test");
 
57
    SAFE_FREE(path);
 
58
}
 
59
 
 
60
static void torture_dirname(void **state) {
 
61
    char *path;
 
62
 
 
63
    (void) state;
 
64
 
 
65
    path=ssh_dirname(TORTURE_TEST_DIR "/test");
 
66
    assert_true(path != NULL);
 
67
    assert_string_equal(path, TORTURE_TEST_DIR );
 
68
    SAFE_FREE(path);
 
69
    path=ssh_dirname(TORTURE_TEST_DIR "/test/");
 
70
    assert_true(path != NULL);
 
71
    assert_string_equal(path, TORTURE_TEST_DIR);
 
72
    SAFE_FREE(path);
 
73
}
 
74
 
 
75
static void torture_ntohll(void **state) {
 
76
    uint64_t value = 0x0123456789abcdef;
 
77
    uint32_t sample = 1;
 
78
    unsigned char *ptr = (unsigned char *) &sample;
 
79
    uint64_t check;
 
80
 
 
81
    (void) state;
 
82
 
 
83
    if (ptr[0] == 1){
 
84
      /* we're in little endian */
 
85
      check = 0xefcdab8967452301;
 
86
    } else {
 
87
      /* big endian */
 
88
      check = value;
 
89
    }
 
90
    value = ntohll(value);
 
91
    assert_true(value == check);
 
92
}
 
93
 
 
94
#ifdef _WIN32
 
95
 
 
96
static void torture_path_expand_tilde_win(void **state) {
 
97
    char *d;
 
98
 
 
99
    (void) state;
 
100
 
 
101
    d = ssh_path_expand_tilde("~\\.ssh");
 
102
    assert_false(d == NULL);
 
103
    print_message("Expanded path: %s\n", d);
 
104
    free(d);
 
105
 
 
106
    d = ssh_path_expand_tilde("/guru/meditation");
 
107
    assert_string_equal(d, "/guru/meditation");
 
108
    free(d);
 
109
}
 
110
 
 
111
#else /* _WIN32 */
 
112
 
 
113
static void torture_path_expand_tilde_unix(void **state) {
 
114
    char h[256];
 
115
    char *d;
 
116
 
 
117
    (void) state;
 
118
 
 
119
    snprintf(h, 256 - 1, "%s/.ssh", getenv("HOME"));
 
120
 
 
121
    d = ssh_path_expand_tilde("~/.ssh");
 
122
    assert_string_equal(d, h);
 
123
    free(d);
 
124
 
 
125
    d = ssh_path_expand_tilde("/guru/meditation");
 
126
    assert_string_equal(d, "/guru/meditation");
 
127
    free(d);
 
128
 
 
129
    snprintf(h, 256 - 1, "~%s/.ssh", getenv("USER"));
 
130
    d = ssh_path_expand_tilde(h);
 
131
 
 
132
    snprintf(h, 256 - 1, "%s/.ssh", getenv("HOME"));
 
133
    assert_string_equal(d, h);
 
134
    free(d);
 
135
}
 
136
 
 
137
#endif /* _WIN32 */
 
138
 
 
139
static void torture_path_expand_escape(void **state) {
 
140
    ssh_session session = *state;
 
141
    const char *s = "%d/%h/by/%r";
 
142
    char *e;
 
143
 
 
144
    session->sshdir = strdup("guru");
 
145
    session->host = strdup("meditation");
 
146
    session->username = strdup("root");
 
147
 
 
148
    e = ssh_path_expand_escape(session, s);
 
149
    assert_string_equal(e, "guru/meditation/by/root");
 
150
    free(e);
 
151
}
 
152
 
 
153
static void torture_path_expand_known_hosts(void **state) {
 
154
    ssh_session session = *state;
 
155
    char *tmp;
 
156
 
 
157
    session->sshdir = strdup("/home/guru/.ssh");
 
158
 
 
159
    tmp = ssh_path_expand_escape(session, "%d/known_hosts");
 
160
    assert_string_equal(tmp, "/home/guru/.ssh/known_hosts");
 
161
    free(tmp);
 
162
}
 
163
 
 
164
static void torture_timeout_elapsed(void **state){
 
165
    struct ssh_timestamp ts;
 
166
    (void) state;
 
167
    ssh_timestamp_init(&ts);
 
168
    usleep(50000);
 
169
    assert_true(ssh_timeout_elapsed(&ts,25));
 
170
    assert_false(ssh_timeout_elapsed(&ts,30000));
 
171
    assert_false(ssh_timeout_elapsed(&ts,75));
 
172
    assert_true(ssh_timeout_elapsed(&ts,0));
 
173
    assert_false(ssh_timeout_elapsed(&ts,-1));
 
174
}
 
175
 
 
176
static void torture_timeout_update(void **state){
 
177
    struct ssh_timestamp ts;
 
178
    (void) state;
 
179
    ssh_timestamp_init(&ts);
 
180
    usleep(50000);
 
181
    assert_int_equal(ssh_timeout_update(&ts,25), 0);
 
182
    assert_in_range(ssh_timeout_update(&ts,30000),29000,29960);
 
183
    assert_in_range(ssh_timeout_update(&ts,75),1,40);
 
184
    assert_int_equal(ssh_timeout_update(&ts,0),0);
 
185
    assert_int_equal(ssh_timeout_update(&ts,-1),-1);
 
186
}
 
187
 
 
188
int torture_run_tests(void) {
 
189
    int rc;
 
190
    const UnitTest tests[] = {
 
191
        unit_test(torture_get_user_home_dir),
 
192
        unit_test(torture_basename),
 
193
        unit_test(torture_dirname),
 
194
        unit_test(torture_ntohll),
 
195
#ifdef _WIN32
 
196
        unit_test(torture_path_expand_tilde_win),
 
197
#else
 
198
        unit_test(torture_path_expand_tilde_unix),
 
199
#endif
 
200
        unit_test_setup_teardown(torture_path_expand_escape, setup, teardown),
 
201
        unit_test_setup_teardown(torture_path_expand_known_hosts, setup, teardown),
 
202
        unit_test(torture_timeout_elapsed),
 
203
        unit_test(torture_timeout_update),
 
204
    };
 
205
 
 
206
    ssh_init();
 
207
    rc=run_tests(tests);
 
208
    ssh_finalize();
 
209
    return rc;
 
210
}