1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.directory.server.core.integ;
20
21
22 /**
23 * Different modes of conducting core tests.
24 *
25 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
26 * @version $Rev$, $Date$
27 */
28 public enum SetupMode
29 {
30 /*
31
32 MATRIX FOR MODE ACTIONS BASED ON SERVER STATE
33
34 | NOSERVICE | PRISTINE | RESTART | ROLLBACK | CUMULATIVE
35 +===========+===========+==========+==========+===========
36 | | | | |
37 RUNNING | NOTHING | SHUTDOWN | SHUTDOWN | REVERT | NOTHING
38 STOPPED | NOTHING | CLEANUP | STARTUP | CLEANUP | RESTART
39 MISSING | NOTHING | CREATE | CREATE | CREATE | CREATE
40
41 */
42
43
44 /**
45 * If a service is running this mode will shutdown the service, destroy
46 * it's working directory, null it out and start all over again with a
47 * new service object to start it up fresh. If no service is running,
48 * yet a valid handle to a stopped service exists, this handle is used
49 * to destroy the working directory then the handle is nulled out.
50 * Whether or not a valid service exists a new one is created, and
51 * started up.
52 */
53 PRISTINE( 0, "PRISTINE: Fresh test with full working directory cleanout." ),
54 /**
55 * If a service is running this mode will shutdown the service, WITHOUT
56 * destroying it's working directory, so changes made in tests are or
57 * should be persistant. The same service object is restarted without
58 * creating a new one. If the service exists yet is found to have been
59 * shutdown it is restarted. If no service is available, one is created
60 * and started up.
61 */
62 RESTART( 1, "RESTART: Working directories are not cleaned out but the core is restarted." ),
63 /**
64 * If a service is running this mode will NOT shutdown the service,
65 * instead the service's state will be reverted to it's previous state
66 * before the last test which operated on it. So changes are not
67 * persisted across tests. If the service exists yet has been shutdown
68 * the working directory is cleaned out and the service is started up.
69 * We must destroy working directories since reverts are not possible
70 * across shutdowns at this point in time (change log is not persistent).
71 */
72 ROLLBACK( 2, "ROLLBACK: The service is not stopped, it's state is restored to the original startup state." ),
73 /**
74 * If a service is running it is used as is. Changes across tests have
75 * no isolation. If the service has been stopped it is simply restarted.
76 * If the service does not exists it is created then started. There is
77 * no attempt to destroy existing working directories if any at all exist.
78 */
79 CUMULATIVE( 3, "CUMULATIVE: Nothing is done to the service between tests so changes accumulate." ),
80 /**
81 * Does nothing at all. Does not care if service is running or if it
82 * exists. This is the default. Really useful with suites which you
83 * may not want to do anything with. Otherwise for all other modes a
84 * suite will start up a server before all runs and shut it down after
85 * all runs.
86 */
87 NOSERVICE( 4, "NOSERVICE: No service is required at all." );
88
89 public static final int PRISTINE_ORDINAL = 0;
90 public static final int RESTART_ORDINAL = 1;
91 public static final int ROLLBACK_ORDINAL = 2;
92 public static final int CUMULATIVE_ORDINAL = 3;
93 public static final int NOSERVICE_ORDINAL = 4;
94
95
96 public final int ordinal;
97 public final String description;
98
99
100 private SetupMode( int ordinal, String description )
101 {
102 this.ordinal = ordinal;
103 this.description = description;
104 }
105
106
107 public boolean isStartedDirtyTestable()
108 {
109 switch( ordinal )
110 {
111 case( PRISTINE_ORDINAL ):
112 return false;
113 case( ROLLBACK_ORDINAL ):
114 return false;
115 case( NOSERVICE_ORDINAL ):
116 return true;
117 case( RESTART_ORDINAL ):
118 return true;
119 case( CUMULATIVE_ORDINAL ):
120 return true;
121 default:
122 throw new IllegalStateException( "Unidentified ordinal value: " + ordinal );
123 }
124 }
125 }