aboutsummaryrefslogtreecommitdiff
path: root/src/test/test-process.c
blob: f5a1f1a54e7c2a74a87e8c1aae6121f1a96515cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/* Copyright (c) 2011-2020, The Tor Project, Inc. */
/* See LICENSE for licensing information */

#include "orconfig.h"
#include <stdio.h>
#ifdef _WIN32
#define WINDOWS_LEAN_AND_MEAN
#include <windows.h>
#else
#include <unistd.h>
#endif /* defined(_WIN32) */
#include <string.h>
#include <stdlib.h>

#ifdef _WIN32
#define SLEEP(sec) Sleep((sec)*1000)
#else
#define SLEEP(sec) sleep(sec)
#endif

/* Trivial test program to test process_t. */
int
main(int argc, char **argv)
{
  /* Does our process get the right arguments? */
  for (int i = 0; i < argc; ++i) {
    fprintf(stdout, "argv[%d] = '%s'\n", i, argv[i]);
    fflush(stdout);
  }

  /* Make sure our process got our environment variable. */
  fprintf(stdout, "Environment variable TOR_TEST_ENV = '%s'\n",
          getenv("TOR_TEST_ENV"));
  fflush(stdout);

  /* Test line handling on stdout and stderr. */
  fprintf(stdout, "Output on stdout\nThis is a new line\n");
  fflush(stdout);

  fprintf(stderr, "Output on stderr\nThis is a new line\n");
  fflush(stderr);

  fprintf(stdout, "Partial line on stdout ...");
  fflush(stdout);

  fprintf(stderr, "Partial line on stderr ...");
  fflush(stderr);

  SLEEP(2);

  fprintf(stdout, "end of partial line on stdout\n");
  fflush(stdout);
  fprintf(stderr, "end of partial line on stderr\n");
  fflush(stderr);

  /* Echo input from stdin. */
  char buffer[1024];

  int count = 0;

  while (fgets(buffer, sizeof(buffer), stdin)) {
    /* Strip the newline. */
    size_t size = strlen(buffer);

    if (size >= 1 && buffer[size - 1] == '\n') {
      buffer[size - 1] = '\0';
      --size;
    }

    if (size >= 1 && buffer[size - 1] == '\r') {
      buffer[size - 1] = '\0';
      --size;
    }

    fprintf(stdout, "Read line from stdin: '%s'\n", buffer);
    fflush(stdout);

    if (++count == 3)
      break;
  }

  fprintf(stdout, "We are done for here, thank you!\n");

  return 0;
}