summaryrefslogtreecommitdiff
path: root/TAO/tests/NestedUpcall/NestedUpCalls_Test.cpp
blob: 8d06ea90cba166916c2429cac23932886fe576b4 (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
86
87
88
89
90
// $Id$

// ============================================================================
//
// = LIBRARY
//    TAO/tests/NestedUpCalls
//
// = FILENAME
//    NestedUpCalls_Test.cpp
//
// = DESCRIPTION
//    This example tests the NestedUpCalls server and client
//    components. The test forks and execs a process to run
//    the client. The clerk and the server
//    communicate for a short duration after which the main process
//    kills both the processes. No command line arguments are needed
//    to run the test.
//
// = AUTHOR
//    Nagarajan Surendran
//
// ============================================================================

#include "tests/test_config.h"
#include "ace/Process.h"

int
main (int, char *[])
{
  ACE_START_TEST ("NestedUpCalls_Test:");

  // Make sure that the backing store is not there. We need to make
  // sure because this test kills the Time Clerk and on some platforms
  // the Clerk is not allowed to do a graceful shutdown. By cleaning
  // the backing store here, we are sure that we get a fresh start and
  // no garbage data from a possible aborted run

  ACE_OS::unlink (ACE_DEFAULT_BACKING_STORE);

  ACE_Process_Options server_options;
  server_options.command_line ("./server -ORBport 0");
  ACE_Process server;

  if (server.spawn (server_options) == -1)
    ACE_ERROR_RETURN ((LM_DEBUG,
                       "%n %p.\n",
                       "Server fork failed"),
                      0);
  else
    ACE_DEBUG ((LM_DEBUG,
                "Server forked with pid = %d.\n",
                server.getpid ()));

  ACE_OS::sleep (5);

  ACE_Process_Options clerk_options;
  clerk_options.command_line ("./client -ORBport 0");
  ACE_Process clerk;

  if (clerk.spawn (clerk_options) == -1)
    ACE_ERROR_RETURN ((LM_DEBUG,
                       "%p.\n",
                       "Client spawn failed"),
                      0);
  else
    ACE_DEBUG ((LM_DEBUG,
                "Client forked with pid = %d.\n",
                clerk.getpid ()));

  ACE_DEBUG ((LM_DEBUG, "Sleeping...\n"));
  ACE_OS::sleep (10);

  if (clerk.terminate () == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "Terminate failed for clerk.\n"),
                      -1);

  if (server.terminate () == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       "Terminate failed for server.\n"),
                      -1);

  // Since we kill the clerk process, on Win32 it may not do a
  // graceful shutdown and the backing store file is left behind.
  if (clerk.wait () != 0)
    ACE_OS::unlink (ACE_DEFAULT_BACKING_STORE);

  ACE_END_TEST;
  return 0;
}