ladle 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/ASL20-LICENSE +343 -0
  2. data/CHANGELOG.md +4 -0
  3. data/LICENSE +20 -0
  4. data/NOTICE +52 -0
  5. data/README.md +121 -0
  6. data/lib/ladle.rb +13 -0
  7. data/lib/ladle/Ladle.iml +13 -0
  8. data/lib/ladle/apacheds/antlr-2.7.6.jar +0 -0
  9. data/lib/ladle/apacheds/apacheds-core-1.0.2.jar +0 -0
  10. data/lib/ladle/apacheds/apacheds-core-shared-1.0.2.jar +0 -0
  11. data/lib/ladle/apacheds/apacheds-kerberos-shared-1.0.2.jar +0 -0
  12. data/lib/ladle/apacheds/apacheds-protocol-changepw-1.0.2.jar +0 -0
  13. data/lib/ladle/apacheds/apacheds-protocol-kerberos-1.0.2.jar +0 -0
  14. data/lib/ladle/apacheds/apacheds-protocol-ldap-1.0.2.jar +0 -0
  15. data/lib/ladle/apacheds/apacheds-protocol-ntp-1.0.2.jar +0 -0
  16. data/lib/ladle/apacheds/apacheds-protocol-shared-1.0.2.jar +0 -0
  17. data/lib/ladle/apacheds/apacheds-server-jndi-1.0.2.jar +0 -0
  18. data/lib/ladle/apacheds/apacheds-server-main-1.0.2.jar +0 -0
  19. data/lib/ladle/apacheds/apacheds-server-ssl-1.0.2.jar +0 -0
  20. data/lib/ladle/apacheds/backport-util-concurrent-2.2.jar +0 -0
  21. data/lib/ladle/apacheds/commons-cli-1.0.jar +0 -0
  22. data/lib/ladle/apacheds/commons-collections-3.2.jar +0 -0
  23. data/lib/ladle/apacheds/commons-io-1.4.jar +0 -0
  24. data/lib/ladle/apacheds/commons-lang-2.1.jar +0 -0
  25. data/lib/ladle/apacheds/jcl-over-slf4j-1.5.6.jar +0 -0
  26. data/lib/ladle/apacheds/jdbm-1.0.jar +0 -0
  27. data/lib/ladle/apacheds/log4j-1.2.14.jar +0 -0
  28. data/lib/ladle/apacheds/mina-core-1.0.2.jar +0 -0
  29. data/lib/ladle/apacheds/mina-filter-ssl-1.0.2.jar +0 -0
  30. data/lib/ladle/apacheds/shared-asn1-0.9.5.5.jar +0 -0
  31. data/lib/ladle/apacheds/shared-asn1-codec-0.9.5.5.jar +0 -0
  32. data/lib/ladle/apacheds/shared-ldap-0.9.5.5.jar +0 -0
  33. data/lib/ladle/apacheds/slf4j-api-1.5.6.jar +0 -0
  34. data/lib/ladle/apacheds/slf4j-log4j12-1.5.6.jar +0 -0
  35. data/lib/ladle/apacheds/spring-beans-1.2.8.jar +0 -0
  36. data/lib/ladle/apacheds/spring-context-1.2.8.jar +0 -0
  37. data/lib/ladle/apacheds/spring-core-1.2.8.jar +0 -0
  38. data/lib/ladle/apacheds/xercesImpl-2.0.2.jar +0 -0
  39. data/lib/ladle/default.ldif +292 -0
  40. data/lib/ladle/java/net/detailedbalance/ladle/LadleFatalException.class +0 -0
  41. data/lib/ladle/java/net/detailedbalance/ladle/LadleFatalException.java +14 -0
  42. data/lib/ladle/java/net/detailedbalance/ladle/Main$1.class +0 -0
  43. data/lib/ladle/java/net/detailedbalance/ladle/Main.class +0 -0
  44. data/lib/ladle/java/net/detailedbalance/ladle/Main.java +141 -0
  45. data/lib/ladle/java/net/detailedbalance/ladle/Server.class +0 -0
  46. data/lib/ladle/java/net/detailedbalance/ladle/Server.java +170 -0
  47. data/lib/ladle/jruby_process.rb +61 -0
  48. data/lib/ladle/ruby_process.rb +46 -0
  49. data/lib/ladle/server.rb +334 -0
  50. data/lib/ladle/version.rb +5 -0
  51. data/spec/ladle/animals.ldif +28 -0
  52. data/spec/ladle/server_spec.rb +306 -0
  53. data/spec/ladle/version_spec.rb +11 -0
  54. data/spec/spec_helper.rb +32 -0
  55. metadata +201 -0
@@ -0,0 +1,13 @@
1
+ ##
2
+ # Ladle dishes out steaming helpings of lightweight directory access
3
+ # (LDAP) for use in testing with rspec, cucumber, or any other ruby
4
+ # test framework.
5
+ #
6
+ # This is the namespace for Ladle's implementation.
7
+ module Ladle
8
+ autoload :VERSION, "ladle/version"
9
+ autoload :Server, "ladle/server"
10
+
11
+ autoload :RubyProcess, "ladle/ruby_process"
12
+ autoload :JRubyProcess, "ladle/jruby_process"
13
+ end
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="JAVA_MODULE" version="4">
3
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
4
+ <exclude-output />
5
+ <content url="file://$MODULE_DIR$">
6
+ <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="false" />
7
+ </content>
8
+ <orderEntry type="inheritedJdk" />
9
+ <orderEntry type="sourceFolder" forTests="false" />
10
+ <orderEntry type="library" name="apacheds" level="project" />
11
+ </component>
12
+ </module>
13
+
@@ -0,0 +1,292 @@
1
+ version: 1
2
+
3
+ dn: ou=people,dc=example,dc=org
4
+ objectClass: top
5
+ objectClass: organizationalUnit
6
+ ou: people
7
+
8
+ dn: uid=aa729,ou=people,dc=example,dc=org
9
+ objectClass: top
10
+ objectClass: person
11
+ objectClass: organizationalPerson
12
+ objectClass: inetOrgPerson
13
+ cn: Alexandra Adams
14
+ sn: Adams
15
+ givenName: Alexandra
16
+ mail: alexandra@example.org
17
+ uid: aa729
18
+
19
+ dn: uid=bb459,ou=people,dc=example,dc=org
20
+ objectClass: top
21
+ objectClass: person
22
+ objectClass: organizationalPerson
23
+ objectClass: inetOrgPerson
24
+ cn: Belle Baldwin
25
+ sn: Baldwin
26
+ givenName: Belle
27
+ mail: belle@example.org
28
+ uid: bb459
29
+
30
+ dn: uid=cc414,ou=people,dc=example,dc=org
31
+ objectClass: top
32
+ objectClass: person
33
+ objectClass: organizationalPerson
34
+ objectClass: inetOrgPerson
35
+ cn: Claire Carpenter
36
+ sn: Carpenter
37
+ givenName: Claire
38
+ mail: claire@example.org
39
+ uid: cc414
40
+
41
+ dn: uid=dd945,ou=people,dc=example,dc=org
42
+ objectClass: top
43
+ objectClass: person
44
+ objectClass: organizationalPerson
45
+ objectClass: inetOrgPerson
46
+ cn: Dorothy Dawson
47
+ sn: Dawson
48
+ givenName: Dorothy
49
+ mail: dorothy@example.org
50
+ uid: dd945
51
+
52
+ dn: uid=ee855,ou=people,dc=example,dc=org
53
+ objectClass: top
54
+ objectClass: person
55
+ objectClass: organizationalPerson
56
+ objectClass: inetOrgPerson
57
+ cn: Elizabeth Emerson
58
+ sn: Emerson
59
+ givenName: Elizabeth
60
+ mail: elizabeth@example.org
61
+ uid: ee855
62
+
63
+ dn: uid=ff531,ou=people,dc=example,dc=org
64
+ objectClass: top
65
+ objectClass: person
66
+ objectClass: organizationalPerson
67
+ objectClass: inetOrgPerson
68
+ cn: Freya Fuller
69
+ sn: Fuller
70
+ givenName: Freya
71
+ mail: freya@example.org
72
+ uid: ff531
73
+
74
+ dn: uid=gg855,ou=people,dc=example,dc=org
75
+ objectClass: top
76
+ objectClass: person
77
+ objectClass: organizationalPerson
78
+ objectClass: inetOrgPerson
79
+ cn: Grace Gonzales
80
+ sn: Gonzales
81
+ givenName: Grace
82
+ mail: grace@example.org
83
+ uid: gg855
84
+
85
+ dn: uid=hh153,ou=people,dc=example,dc=org
86
+ objectClass: top
87
+ objectClass: person
88
+ objectClass: organizationalPerson
89
+ objectClass: inetOrgPerson
90
+ cn: Hilda Hatfield
91
+ sn: Hatfield
92
+ givenName: Hilda
93
+ mail: hilda@example.org
94
+ uid: hh153
95
+
96
+ dn: uid=ii711,ou=people,dc=example,dc=org
97
+ objectClass: top
98
+ objectClass: person
99
+ objectClass: organizationalPerson
100
+ objectClass: inetOrgPerson
101
+ cn: Iona Ingram
102
+ sn: Ingram
103
+ givenName: Iona
104
+ mail: iona@example.org
105
+ uid: ii711
106
+
107
+ dn: uid=jj243,ou=people,dc=example,dc=org
108
+ objectClass: top
109
+ objectClass: person
110
+ objectClass: organizationalPerson
111
+ objectClass: inetOrgPerson
112
+ cn: Josephine Jackson
113
+ sn: Jackson
114
+ givenName: Josephine
115
+ mail: josephine@example.org
116
+ uid: jj243
117
+
118
+ dn: uid=kk891,ou=people,dc=example,dc=org
119
+ objectClass: top
120
+ objectClass: person
121
+ objectClass: organizationalPerson
122
+ objectClass: inetOrgPerson
123
+ cn: Kelly Kline
124
+ sn: Kline
125
+ givenName: Kelly
126
+ mail: kelly@example.org
127
+ uid: kk891
128
+
129
+ dn: uid=ll819,ou=people,dc=example,dc=org
130
+ objectClass: top
131
+ objectClass: person
132
+ objectClass: organizationalPerson
133
+ objectClass: inetOrgPerson
134
+ cn: Leah Lawrence
135
+ sn: Lawrence
136
+ givenName: Leah
137
+ mail: leah@example.org
138
+ uid: ll819
139
+
140
+ dn: uid=mm405,ou=people,dc=example,dc=org
141
+ objectClass: top
142
+ objectClass: person
143
+ objectClass: organizationalPerson
144
+ objectClass: inetOrgPerson
145
+ cn: Mona Maddox
146
+ sn: Maddox
147
+ givenName: Mona
148
+ mail: mona@example.org
149
+ uid: mm405
150
+
151
+ dn: uid=nn297,ou=people,dc=example,dc=org
152
+ objectClass: top
153
+ objectClass: person
154
+ objectClass: organizationalPerson
155
+ objectClass: inetOrgPerson
156
+ cn: Noel Nash
157
+ sn: Nash
158
+ givenName: Noel
159
+ mail: noel@example.org
160
+ uid: nn297
161
+
162
+ dn: uid=oo981,ou=people,dc=example,dc=org
163
+ objectClass: top
164
+ objectClass: person
165
+ objectClass: organizationalPerson
166
+ objectClass: inetOrgPerson
167
+ cn: Ophelia Osborn
168
+ sn: Osborn
169
+ givenName: Ophelia
170
+ mail: ophelia@example.org
171
+ uid: oo981
172
+
173
+ dn: uid=pp468,ou=people,dc=example,dc=org
174
+ objectClass: top
175
+ objectClass: person
176
+ objectClass: organizationalPerson
177
+ objectClass: inetOrgPerson
178
+ cn: Penelope Patel
179
+ sn: Patel
180
+ givenName: Penelope
181
+ mail: penelope@example.org
182
+ uid: pp468
183
+
184
+ dn: uid=qq612,ou=people,dc=example,dc=org
185
+ objectClass: top
186
+ objectClass: person
187
+ objectClass: organizationalPerson
188
+ objectClass: inetOrgPerson
189
+ cn: Quin Queen
190
+ sn: Queen
191
+ givenName: Quin
192
+ mail: quin@example.org
193
+ uid: qq612
194
+
195
+ dn: uid=rr477,ou=people,dc=example,dc=org
196
+ objectClass: top
197
+ objectClass: person
198
+ objectClass: organizationalPerson
199
+ objectClass: inetOrgPerson
200
+ cn: Ruth Rowland
201
+ sn: Rowland
202
+ givenName: Ruth
203
+ mail: ruth@example.org
204
+ uid: rr477
205
+
206
+ dn: uid=ss198,ou=people,dc=example,dc=org
207
+ objectClass: top
208
+ objectClass: person
209
+ objectClass: organizationalPerson
210
+ objectClass: inetOrgPerson
211
+ cn: Serena Solomon
212
+ sn: Solomon
213
+ givenName: Serena
214
+ mail: serena@example.org
215
+ uid: ss198
216
+
217
+ dn: uid=tt882,ou=people,dc=example,dc=org
218
+ objectClass: top
219
+ objectClass: person
220
+ objectClass: organizationalPerson
221
+ objectClass: inetOrgPerson
222
+ cn: Talia Torres
223
+ sn: Torres
224
+ givenName: Talia
225
+ mail: talia@example.org
226
+ uid: tt882
227
+
228
+ dn: uid=uu972,ou=people,dc=example,dc=org
229
+ objectClass: top
230
+ objectClass: person
231
+ objectClass: organizationalPerson
232
+ objectClass: inetOrgPerson
233
+ cn: Ursula Underwood
234
+ sn: Underwood
235
+ givenName: Ursula
236
+ mail: ursula@example.org
237
+ uid: uu972
238
+
239
+ dn: uid=vv180,ou=people,dc=example,dc=org
240
+ objectClass: top
241
+ objectClass: person
242
+ objectClass: organizationalPerson
243
+ objectClass: inetOrgPerson
244
+ cn: Vera Vickers
245
+ sn: Vickers
246
+ givenName: Vera
247
+ mail: vera@example.org
248
+ uid: vv180
249
+
250
+ dn: uid=ww369,ou=people,dc=example,dc=org
251
+ objectClass: top
252
+ objectClass: person
253
+ objectClass: organizationalPerson
254
+ objectClass: inetOrgPerson
255
+ cn: Wendy Wise
256
+ sn: Wise
257
+ givenName: Wendy
258
+ mail: wendy@example.org
259
+ uid: ww369
260
+
261
+ dn: uid=xx396,ou=people,dc=example,dc=org
262
+ objectClass: top
263
+ objectClass: person
264
+ objectClass: organizationalPerson
265
+ objectClass: inetOrgPerson
266
+ cn: Xara Xiong
267
+ sn: Xiong
268
+ givenName: Xara
269
+ mail: xara@example.org
270
+ uid: xx396
271
+
272
+ dn: uid=yy423,ou=people,dc=example,dc=org
273
+ objectClass: top
274
+ objectClass: person
275
+ objectClass: organizationalPerson
276
+ objectClass: inetOrgPerson
277
+ cn: Yvette Yates
278
+ sn: Yates
279
+ givenName: Yvette
280
+ mail: yvette@example.org
281
+ uid: yy423
282
+
283
+ dn: uid=zz882,ou=people,dc=example,dc=org
284
+ objectClass: top
285
+ objectClass: person
286
+ objectClass: organizationalPerson
287
+ objectClass: inetOrgPerson
288
+ cn: Zana Zimmerman
289
+ sn: Zimmerman
290
+ givenName: Zana
291
+ mail: zana@example.org
292
+ uid: zz882
@@ -0,0 +1,14 @@
1
+ package net.detailedbalance.ladle;
2
+
3
+ /**
4
+ * @author Rhett Sutphin
5
+ */
6
+ public class LadleFatalException extends RuntimeException {
7
+ public LadleFatalException(String message) {
8
+ super(message);
9
+ }
10
+
11
+ public LadleFatalException(String msg, Throwable cause) {
12
+ super(msg, cause);
13
+ }
14
+ }
@@ -0,0 +1,141 @@
1
+ package net.detailedbalance.ladle;
2
+
3
+ import org.apache.commons.cli.CommandLine;
4
+ import org.apache.commons.cli.CommandLineParser;
5
+ import org.apache.commons.cli.GnuParser;
6
+ import org.apache.commons.cli.OptionBuilder;
7
+ import org.apache.commons.cli.Options;
8
+ import org.apache.commons.cli.ParseException;
9
+ import org.apache.log4j.BasicConfigurator;
10
+ import org.apache.log4j.ConsoleAppender;
11
+ import org.apache.log4j.Level;
12
+ import org.apache.log4j.PatternLayout;
13
+
14
+ import java.io.BufferedReader;
15
+ import java.io.File;
16
+ import java.io.IOException;
17
+ import java.io.InputStreamReader;
18
+ import java.io.PrintWriter;
19
+
20
+ /**
21
+ * The executable front-end to {@link Server}. Uses stdin/stdout as a control channel, with
22
+ * tracing info printed to stderr. The arguments expected and the control channel contents are
23
+ * tightly bound to the ruby controller code in <code>lib/ladle/server.rb</code>. There is no
24
+ * validation for form at this level -- it's all done in ruby.
25
+ *
26
+ * @author Rhett Sutphin
27
+ */
28
+ public class Main {
29
+ public static void main(String[] args) {
30
+ configureLog4j();
31
+
32
+ CommandLine commandLine = parseArgs(args);
33
+
34
+ try {
35
+ if (commandLine.hasOption('F')) {
36
+ behaveBadly(commandLine.getOptionValue('F'));
37
+ }
38
+
39
+ final Server s = new Server(
40
+ new Integer(commandLine.getOptionValue("p")),
41
+ commandLine.getOptionValue("d"),
42
+ new File(commandLine.getOptionValue("l")),
43
+ new File(commandLine.getOptionValue("t")));
44
+
45
+ Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
46
+ public void run() {
47
+ s.stop();
48
+ System.out.println("STOPPED");
49
+ }
50
+ }));
51
+
52
+ s.start();
53
+ System.out.println("STARTED");
54
+ } catch (LadleFatalException lfe) {
55
+ reportError(lfe);
56
+ System.exit(1);
57
+ } catch (Exception e) {
58
+ reportError(e);
59
+ System.exit(2);
60
+ }
61
+
62
+ BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
63
+ String line;
64
+ try {
65
+ //noinspection LoopStatementThatDoesntLoop
66
+ while ((line = in.readLine()) != null) {
67
+ if ("STOP".equals(line)) {
68
+ System.exit(0); // shutdown hook will handle stopping everything
69
+ } else {
70
+ System.out.println("FATAL: unknown control message \"" + line + '"');
71
+ System.exit(9);
72
+ }
73
+ }
74
+ } catch (IOException e) {
75
+ reportError(e);
76
+ System.exit(3);
77
+ }
78
+ }
79
+
80
+ @SuppressWarnings({ "InfiniteLoopStatement" })
81
+ private static void behaveBadly(String desiredFailureType) throws InterruptedException {
82
+ if ("before_start".equals(desiredFailureType)) {
83
+ reportError("Expected failure for testing");
84
+ System.exit(207);
85
+ } else if ("hang".equals(desiredFailureType)) {
86
+ while (true) { Thread.sleep(1000); }
87
+ }
88
+ }
89
+
90
+ @SuppressWarnings({"AccessStaticViaInstance"})
91
+ private static CommandLine parseArgs(String[] args) {
92
+ Options options = new Options()
93
+ .addOption(OptionBuilder.
94
+ withLongOpt("fail").hasArg().
95
+ withDescription("Force a failure (for testing)").
96
+ create('F'))
97
+ .addOption(OptionBuilder.
98
+ withLongOpt("port").hasArg().isRequired().
99
+ withDescription("Specify port to use").
100
+ create('p'))
101
+ .addOption(OptionBuilder.
102
+ withLongOpt("domain").hasArg().isRequired().
103
+ withDescription("Specify the domain (e.g., dc=example,dc=com)").
104
+ create('d'))
105
+ .addOption(OptionBuilder.
106
+ withLongOpt("ldif").hasArg().isRequired().
107
+ withDescription("Specify the LDIF data to load").
108
+ create('l'))
109
+ .addOption(OptionBuilder.
110
+ withLongOpt("tmpdir").hasArg().isRequired().
111
+ withDescription("Specify the temporary directory to use").
112
+ create('t'))
113
+ ;
114
+ CommandLineParser parser = new GnuParser();
115
+
116
+ try {
117
+ return parser.parse(options, args);
118
+ } catch (ParseException e) {
119
+ reportError(e);
120
+ System.exit(18);
121
+ return null; // unreachable
122
+ }
123
+ }
124
+
125
+ private static void configureLog4j() {
126
+ ConsoleAppender appender = new ConsoleAppender();
127
+ appender.setWriter(new PrintWriter(System.err));
128
+ appender.setLayout(new PatternLayout("%p: %m%n"));
129
+ appender.setThreshold(Level.INFO);
130
+ BasicConfigurator.configure(appender);
131
+ }
132
+
133
+ private static void reportError(Exception e) {
134
+ reportError(e.getMessage());
135
+ e.printStackTrace(System.err);
136
+ }
137
+
138
+ private static void reportError(String message) {
139
+ System.out.println("FATAL: " + message);
140
+ }
141
+ }