summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/tests/Concurrency/README
blob: df07ea6075fee21a811618572ae2907cbd599ce2 (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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111


This is the readme file for the tests of the concurrency service.

The test program has been changed to use a configuration file instead of
hard coded test procedures. The old test procedures are left in the
program for backwards compatibility, but they will be removed at a later
point in time.

The description of the old tests is in the readme file for the
concurrency service in the directory:
        $TAO_ROOT/orbsvcs/Concurrency_Control
please consult this file for a decription of these tests.

The new tests are described by this simle test language:

start:		/* empty */
                | cmd_list
		;

cmd_list:	cmd_list cmd
		| cmd
		;

cmd:		  start <config_file_name> ;
		| create <lock_set_name> ;
		| create ;
		| lock <lock_set_name> <lock_mode> ;
		| lock <lock_mode> ;
		| unlock <lock_set_name> <lock_mode> ;
		| unlock <lock_mode> ;
		| try_lock <lock_set_name> <lock_mode> ;
		| try_lock <lock_mode> ;
		| change_mode <lock_set_name> <lock_mode> <lock_mode> ;
		| change_mode <lock_mode> <lock_mode> ;
		| lookup <lock_set_name> ;
		| sleep <int> ;
		| repeat <int> ;
		| wait ;
		| wait <prompt> ;
		;

lock_mode:	read | intention_read | upgrade | write | intention_write

prompt:		" string "

If the lock set name is left out the default lock set is used. The
repeat command just sets a global variable in the test, i.e. the last
repeat command is the one that will take effect - the whole script is
run the specified number of times.

An example of a script (assuming it's called 'test.cfg' - comments are
not supported):

  // Start a new CC_client with test.txt as script file
  start test.txt;
  // Create the lock set "ls1" and register it in the naming service
  create ls1;
  // Lock the read lock in the lock set
  lock ls1 read;
  // Try the read lock
  try_lock ls1 read;
  // sleep two seconds
  sleep 2;
  // Wait for the user to press enter
  wait;
  // Unlock the read lock in the ls1 lock set
  unlock ls1 read;
  // Change the mode of the read lock in the ls1 lock set to write mode
  change_mode ls1 read write;

The test can be run with the command ./CC_client -c test.cfg.

There are currentlig the following tests in the
   $TAO_ROOT/orbsvcs/tests/Concurrency
directory:
  basic_tests.cfg    The same as running ./CC_client -b
  extended_tests.cfg The same as running ./CC_client -e '1;test'
                                         ./CC_client -e '2;test'
                                         ./CC_client -e '3;test'
  test.dinphil       Dining philosophers. Uses test.phil[1-5]

----------------------------------------

THE IMPLEMENTATION

The implementation of the concurrency service tests is located in
the $TAO_ROOT/orbsvcs/tests/Concurrency directory and consists of
the following files:

	CC_client.{h,cpp} contain initialization and the main function.

	CC_tests.{h,cpp} The old tests [-b] and [-e] options to CC_client

	CC_command.{h,cpp} The commands that can be used in the scripting
		language are implemented in these files. The list of
		commands to execute is also implemented here.

	CC_command.l The lex file for the script language.

	CC_command.y The yacc file for the script language.

	CC_command.tab.{h,cpp} and lex.CC_command.cpp Derived files from
		the lex and yacc files.

        CC_naming_service.{h,cpp} A wrapper class around the necessary
		naming service functinallity for the tests.

	CC_test_utils.{h,cpp} provides a namespace for utility functions.

	test.* Test scripts for the concurrency service.