mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

neil_a_wilson
16.44.2006 cf77becb4893685f0dd67e76724aa366b6d8f039
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying * information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Portions Copyright 2006 Sun Microsystems, Inc.
 */
package org.opends.server;
 
import static org.opends.server.TestCaseUtils.copyFile;
import static org.opends.server.TestCaseUtils.deleteDirectory;
 
import java.io.File;
import java.io.IOException;
 
import org.opends.server.config.ConfigFileHandler;
import org.opends.server.core.DirectoryServer;
 
/**
 * This dependency makes sure that a directory server instance is
 * available with a configuration environment loaded from the source
 * tree's resource directory.
 * <p>
 * This dependency should be used by test cases which need a directory
 * server instance with a working configuration environment.
 * <p>
 * The dependency requires the
 * {@link org.opends.server.InitialDirectoryServerTestCaseDependency}.
 *
 * @author Matthew Swift
 */
public final class ConfigurationTestCaseDependency extends
    TestCaseDependency {
 
  // Flag used to prevent multiple initialization.
  private boolean isInitialized = false;
 
  // The name of the temporary directory used to contain the
  // configuration.
  private File tempDirectory = null;
 
  // The initial directory server dependency (required by this
  // dependency).
  private InitialDirectoryServerTestCaseDependency dependency;
 
  /**
   * Create a dependency which will make sure that the configuration
   * file located in the source tree's resource directory is loaded.
   *
   * @param dependency
   *          The initial directory server dependency which this
   *          dependency requires.
   */
  public ConfigurationTestCaseDependency(
      InitialDirectoryServerTestCaseDependency dependency) {
    this.dependency = dependency;
  }
 
  /**
   * {@inheritDoc}
   */
  public void setUp() throws Exception {
    if (isInitialized == false) {
      // Make sure that the initial server is available.
      dependency.setUp();
 
      // Create temporary config file structure.
      File tempDirectory = getTempDirectory();
 
      // Create the configuration directory.
      File configDirectory = new File(tempDirectory, "config");
      configDirectory.mkdir();
 
      // All files to be copied are taken from the resource directory.
      File resourceDirectory = new File("resource");
      File configResourceDirectory = new File("resource/config");
 
      // Copy over the configuration file.
      File configFile = new File(configDirectory, "config.ldif");
      copyFile(new File(configResourceDirectory, "config.ldif"), configFile);
 
      // Configuration is dependent on JMX to register an alert generator.
      DirectoryServer.initializeJMX();
 
      DirectoryServer directoryServer = DirectoryServer.getInstance();
      directoryServer.initializeConfiguration(ConfigFileHandler.class
          .getName(), configFile.getAbsolutePath());
 
      // Prevent multiple initialization.
      isInitialized = true;
    }
  }
 
  /**
   * {@inheritDoc}
   */
  @Override
  public void tearDown() throws Exception {
    if (tempDirectory != null) {
      // Clean up configuration directories.
      try {
        deleteDirectory(tempDirectory);
      } catch (IOException e) {
        // Ignore errors.
      }
 
      // Reset the dependency state.
      tempDirectory = null;
    }
 
    isInitialized = false;
  }
 
  /**
   * Create a temporary directory.
   *
   * @return The temporary directory.
   * @throws IOException
   *           If the temporary directory could not be created.
   */
  public File getTempDirectory() throws IOException {
    if (tempDirectory == null) {
      tempDirectory = File.createTempFile("ds7test", null);
 
      if (!tempDirectory.delete()) {
        throw new IOException("Unable to delete temporary file: "
            + tempDirectory);
      }
 
      if (!tempDirectory.mkdir()) {
        throw new IOException("Unable to create temporary directory: "
            + tempDirectory);
      }
    }
 
    return tempDirectory;
  }
}