~upstart-devel/upstart/trunk

« back to all changes in this revision

Viewing changes to init/tests/test_log.c

  • Committer: James Hunt
  • Date: 2015-04-24 12:57:48 UTC
  • mto: This revision was merged to the branch mainline in revision 1665.
  • Revision ID: james.hunt@ubuntu.com-20150424125748-m1fxqdjt9sixotzj
* init/log.c:
  - Make log_flushed public to allow tests to test
    log_handle_unflushed() properly.
  - log_handle_unflushed():
    - Make log a child of the list entry and the latter a child of the
      unflushed list.
  - log_clear_unflushed():
    - Ensure the list entry is freed along with the log to avoid an
      invalid entry remaining in the list (LP: #1447756).
* init/tests/test_log.c:
  - test_log_destroy(): Added new test:
    - "ensure unflushed data moved to unflushed list with uid 0"

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
#include "job.h"
35
35
#include "test_util_common.h"
36
36
 
 
37
extern int log_flushed;
 
38
 
37
39
/*
38
40
 * To help with understanding the TEST_ALLOC_FAIL peculiarities
39
41
 * below...
1130
1132
test_log_destroy (void)
1131
1133
{
1132
1134
        Log  *log;
 
1135
        Log  *tmp_log;
1133
1136
        int   ret;
1134
1137
        int   flags;
1135
1138
        char  str[] = "hello, world!";
1138
1141
        int   found_fd;
1139
1142
        char  filename[1024];
1140
1143
        int   fd;
 
1144
        NihListEntry *entry;
 
1145
        struct stat  statbuf;
1141
1146
 
1142
1147
        TEST_FUNCTION ("log_destroy");
1143
1148
 
1207
1212
        TEST_FREE (log->unflushed);
1208
1213
 
1209
1214
        /************************************************************/
 
1215
        TEST_FEATURE ("ensure unflushed data moved to unflushed list with uid 0");
 
1216
 
 
1217
        TEST_TRUE (NIH_LIST_EMPTY (log_unflushed_files));
 
1218
 
 
1219
        TEST_EQ (openpty (&pty_master, &pty_slave, NULL, NULL, NULL), 0);
 
1220
 
 
1221
        TEST_FILENAME (filename);
 
1222
 
 
1223
        /* Make file inaccessible to ensure data cannot be written
 
1224
         * and will thus be added to the unflushed buffer.
 
1225
         */
 
1226
        fd = open (filename, O_CREAT | O_EXCL, 0);
 
1227
        TEST_NE (fd, -1);
 
1228
        close (fd);
 
1229
 
 
1230
        log = log_new (NULL, filename, pty_master, 0);
 
1231
        TEST_NE_P (log, NULL);
 
1232
 
 
1233
        ret = write (pty_slave, str, strlen (str));
 
1234
        TEST_GT (ret, 0);
 
1235
 
 
1236
        TEST_WATCH_UPDATE ();
 
1237
        close (pty_slave);
 
1238
        TEST_NE_P (log->unflushed, NULL);
 
1239
        TEST_EQ (log->unflushed->len, strlen(str));
 
1240
        TEST_EQ_STR (log->unflushed->buf, str);
 
1241
        TEST_FREE_TAG (log);
 
1242
 
 
1243
        /* reset */
 
1244
        log_flushed = 0;
 
1245
 
 
1246
        TEST_TRUE (NIH_LIST_EMPTY (log_unflushed_files));
 
1247
        ret = log_handle_unflushed (NULL, log);
 
1248
 
 
1249
        TEST_EQ (ret, 0);
 
1250
        TEST_FALSE (NIH_LIST_EMPTY (log_unflushed_files));
 
1251
 
 
1252
        entry = (NihListEntry *)log_unflushed_files->next;
 
1253
        TEST_NE_P (entry, NULL);
 
1254
        TEST_FREE_TAG (entry);
 
1255
        TEST_ALLOC_PARENT (entry, log_unflushed_files);
 
1256
 
 
1257
        tmp_log = entry->data;
 
1258
        TEST_EQ_P (tmp_log, log);
 
1259
        TEST_ALLOC_PARENT (log, entry);
 
1260
 
 
1261
        /* make file accessible again */
 
1262
        assert0 (chmod (filename, 0755));
 
1263
 
 
1264
        ret = log_clear_unflushed ();
 
1265
        assert0 (ret);
 
1266
 
 
1267
        TEST_FREE (entry);
 
1268
        TEST_FREE (log);
 
1269
 
 
1270
        assert0 (stat (filename, &statbuf));
 
1271
        TEST_EQ (statbuf.st_size, strlen (str));
 
1272
 
 
1273
        TEST_TRUE (NIH_LIST_EMPTY (log_unflushed_files));
 
1274
 
 
1275
        /* full reset */
 
1276
        log_flushed = 0;
 
1277
        nih_free (log_unflushed_files);
 
1278
        log_unflushed_files = NULL;
 
1279
        log_unflushed_init ();
 
1280
 
 
1281
        nih_free (nih_io_watches);
 
1282
        nih_io_watches = NULL;
 
1283
        nih_io_init ();
 
1284
 
 
1285
        assert0 (unlink (filename));
 
1286
 
 
1287
        /************************************************************/
1210
1288
        TEST_FEATURE ("ensure watch freed when log destroyed");
1211
1289
 
 
1290
        /* Make file inaccessible to ensure data cannot be written
 
1291
         * and will thus be added to the unflushed buffer.
 
1292
         */
 
1293
        fd = open (filename, O_CREAT | O_EXCL, 0);
 
1294
        TEST_NE (fd, -1);
 
1295
        close (fd);
 
1296
 
1212
1297
        TEST_EQ (openpty (&pty_master, &pty_slave, NULL, NULL, NULL), 0);
1213
1298
 
1214
1299
        log = log_new (NULL, filename, pty_master, 0);