001package com.ganteater.ae.processor;
002
003import static org.junit.Assert.assertEquals;
004import static org.junit.Assert.assertSame;
005import static org.junit.Assert.assertTrue;
006
007import java.io.File;
008import java.io.IOException;
009import java.net.ServerSocket;
010import java.util.HashMap;
011import java.util.Map;
012import java.util.Properties;
013
014import org.junit.Test;
015
016import com.ganteater.ae.AEManager;
017import com.ganteater.ae.CommandException;
018import com.ganteater.ae.ILogger;
019import com.ganteater.ae.RecipeListener;
020import com.ganteater.ae.util.xml.easyparser.Node;
021
022public class TaskProcessorThreadTest {
023
024        @Test
025        public void clone_whenCloneIdIsZero_returnsSameInstanceAndSetsThreadId() throws Exception {
026                // Arrange
027                DummyProcessor parent = new DummyProcessor();
028                Node task = new Node("Task");
029                ILogger log = parent.getListener().createLog("test", false);
030                TaskProcessorThread thread = new TaskProcessorThread(parent, task, new File("."), log);
031
032                // Act
033                TaskProcessorThread cloned = thread.clone(0);
034
035                // Assert
036                assertSame(thread, cloned);
037                assertEquals("0", String.valueOf(thread.getProcessor().getVariables().get(TaskProcessorThread.THREAD_ID)));
038        }
039
040        @Test
041        public void clone_whenCloneIdIsNonZero_returnsNewInstanceAndSetsThreadId() throws Exception {
042                // Arrange
043                DummyProcessor parent = new DummyProcessor();
044                Node task = new Node("Task");
045                ILogger log = parent.getListener().createLog("test", false);
046                TaskProcessorThread thread = new TaskProcessorThread(parent, task, new File("."), log);
047
048                // Act
049                TaskProcessorThread cloned = thread.clone(2);
050
051                // Assert
052                assertTrue(cloned != thread);
053                assertEquals("2", String.valueOf(cloned.getProcessor().getVariables().get(TaskProcessorThread.THREAD_ID)));
054        }
055
056        private static class DummyProcessor extends Processor {
057                private final RecipeListener listener = new DummyRecipeListener();
058
059                DummyProcessor() {
060                        super(new HashMap<String, Object>(), new Node("Config"), new File("."));
061                        setTestListener(listener);
062                        this.startVariables = new HashMap<String, Object>();
063                        this.variables = new HashMap<String, Object>();
064                        this.log = listener.createLog("dummy", false);
065                }
066
067                @Override
068                public void regChildProcess(TaskProcessorThread aMaxTestRunnable) {
069                        // no-op
070                }
071
072                @Override
073                public void unregChildProcess(TaskProcessorThread aMaxTestRunnable) {
074                        // no-op
075                }
076        }
077
078        private static class DummyRecipeListener implements RecipeListener {
079                private final AEManager manager = new DummyManager();
080
081                @Override
082                public void setProgress(String aCurrentTaskName, long aMaxTags, long aCurrTags, boolean aErrorState) {
083                        // no-op
084                }
085
086                @Override
087                public void setStatus(int status) {
088                        // no-op
089                }
090
091                @Override
092                public void startTask(String aNameTask) {
093                        // no-op
094                }
095
096                @Override
097                public void endTask(boolean aErrorState) {
098                        // no-op
099                }
100
101                @Override
102                public void changeVariable(String aAttribut, Object aValue) {
103                        // no-op
104                }
105
106                @Override
107                public void startCommand(int i) {
108                        // no-op
109                }
110
111                @Override
112                public void startChildProcess(TaskProcessorThread aMaxTestRunnable) {
113                        // no-op
114                }
115
116                @Override
117                public void stopChildProcess(TaskProcessorThread aMaxTestRunnable) {
118                        // no-op
119                }
120
121                @Override
122                public void criticalError(CommandException aThrowable, Processor processor) {
123                        // no-op
124                }
125
126                @Override
127                public void checkFailure(CommandException e, Processor processor) {
128                        // no-op
129                }
130
131                @Override
132                public void aboutTest(String theTaskName, Node aCurrentAction) {
133                        // no-op
134                }
135
136                @Override
137                public String getRunMode() {
138                        return null;
139                }
140
141                @Override
142                public void exceptionIgnored(Throwable e) {
143                        // no-op
144                }
145
146                @Override
147                public ServerSocket createPort(int thePort, String aDescription) throws IOException {
148                        return new ServerSocket(thePort);
149                }
150
151                @Override
152                public void closePort(int thePort) {
153                        // no-op
154                }
155
156                @Override
157                public void errorInformation(Processor processor, Throwable e, Node aTaskNode) throws CommandException {
158                        throw new CommandException(e, processor, aTaskNode);
159                }
160
161                @Override
162                public void outToView(Processor processor, Properties aProperties, Object theValue) {
163                        // no-op
164                }
165
166                @Override
167                public void runCommandView(Properties params) throws Throwable {
168                        // no-op
169                }
170
171                @Override
172                public ILogger createLog(String aLogName, boolean mainLog) {
173                        return new NoOpLogger(aLogName);
174                }
175
176                @Override
177                public AEManager getManager() {
178                        return manager;
179                }
180
181                @Override
182                public void pause() {
183                        // no-op
184                }
185
186                @Override
187                public void resume() {
188                        // no-op
189                }
190
191                @Override
192                public void stopTest() {
193                        // no-op
194                }
195
196                @Override
197                public boolean isNotifyMe() {
198                        return false;
199                }
200        }
201
202        private static class DummyManager implements AEManager {
203
204                @Override
205                public File getStartDir() {
206                        return new File(".");
207                }
208
209                @Override
210                public String inputChoice(String varName, String description, String[] varValues, String defaultValue,
211                                Processor taskProcessor, boolean notifyMe) {
212                        return null;
213                }
214
215                @Override
216                public String inputFile(String name, String description, File defaultFile, ILogger log, Processor taskProcessor) {
217                        return null;
218                }
219
220                @Override
221                public void inputDataTable(Processor unit, Node aTableNode, boolean notifyMe) throws Exception {
222                        // no-op
223                }
224
225                @Override
226                public boolean confirmation(String name, String message, Processor unit, boolean notifyMe) throws Exception {
227                        return false;
228                }
229
230                @Override
231                public String inputValue(String name, String description, String value, ILogger log, String type, boolean notifyMe,
232                                Processor processor) throws Exception {
233                        return null;
234                }
235
236                @Override
237                public String getTestPath(String newName) {
238                        return null;
239                }
240
241                @Override
242                public String[] getTestsList() {
243                        return new String[0];
244                }
245
246                @Override
247                public File getWorkingDir() {
248                        return new File(".");
249                }
250
251                @Override
252                public com.ganteater.ae.MultiTaskRunDialog tasksChoice(com.ganteater.ae.MultiTaskRunDialog choiceRunner,
253                                String[] theNames, boolean exceptionIgnoreFlag, Object setup, Processor taskProcessor, boolean visible) {
254                        return null;
255                }
256
257                @Override
258                public String choiceValue(String name, String description, Object[] aPossibleValues, ILogger log, boolean notifyMe,
259                                Processor processor) {
260                        return null;
261                }
262
263                @Override
264                public File getFile(String path) {
265                        return new File(path);
266                }
267
268                @Override
269                public Map<String, Object> getSystemVariables() {
270                        return new HashMap<String, Object>();
271                }
272
273                @Override
274                public void setConsoleDefaultInput(boolean defaultMode) {
275                        // no-op
276                }
277
278                @Override
279                public boolean isConsoleDefaultInput(String varName, String description) {
280                        return true;
281                }
282
283                @Override
284                public com.ganteater.ae.RecipeRunner runTask(String name, boolean async) throws CommandException {
285                        return null;
286                }
287
288                @Override
289                public Node getConfigNode() {
290                        return new Node("Config");
291                }
292
293                @Override
294                public void startTaskNotify(com.ganteater.ae.RecipeRunner task) {
295                        // no-op
296                }
297
298                @Override
299                public void progressText(String name) {
300                        // no-op
301                }
302
303                @Override
304                public void progressValue(int i, int length, boolean success) {
305                        // no-op
306                }
307
308                @Override
309                public void addRunner(com.ganteater.ae.RecipeRunner testRunner) {
310                        // no-op
311                }
312
313                @Override
314                public void removeRunner(com.ganteater.ae.RecipeRunner testRunner) {
315                        // no-op
316                }
317
318                @Override
319                public void finished(String aTestFile) {
320                        // no-op
321                }
322
323                @Override
324                public MessageHandler message(Processor taskProcessor, String message, String description, boolean notifyMe) {
325                        return null;
326                }
327
328                @Override
329                public File getHomeWorkingDir() {
330                        return new File(".");
331                }
332        }
333
334        private static class NoOpLogger implements ILogger {
335                private final String name;
336
337                NoOpLogger(String name) {
338                        this.name = name;
339                }
340
341                @Override
342                public Object info(Object message) {
343                        return message;
344                }
345
346                @Override
347                public Object debug(Object message) {
348                        return message;
349                }
350
351                @Override
352                public Object debug(Object message, Throwable t) {
353                        return message;
354                }
355
356                @Override
357                public Object warn(Object message) {
358                        return message;
359                }
360
361                @Override
362                public Object error(Object message) {
363                        return message;
364                }
365
366                @Override
367                public Object error(Object message, Throwable t) {
368                        return message;
369                }
370
371                @Override
372                public String getName() {
373                        return name;
374                }
375
376                @Override
377                public boolean isFilterEnabled() {
378                        return false;
379                }
380
381                @Override
382                public String filter(Object message) {
383                        return String.valueOf(message);
384                }
385        }
386}