19 package org.sleuthkit.autopsy.testing;
21 import java.awt.AWTException;
22 import java.awt.Rectangle;
23 import java.awt.Robot;
24 import java.awt.Toolkit;
25 import java.awt.image.BufferedImage;
27 import java.io.IOException;
28 import java.text.DateFormat;
29 import java.text.SimpleDateFormat;
30 import java.util.ArrayList;
31 import java.util.Date;
32 import java.util.List;
33 import java.util.Random;
34 import java.util.logging.Level;
35 import java.util.logging.Logger;
36 import javax.imageio.ImageIO;
37 import javax.swing.JDialog;
38 import javax.swing.text.JTextComponent;
39 import org.netbeans.jellytools.MainWindowOperator;
40 import org.netbeans.jellytools.NbDialogOperator;
41 import org.netbeans.jellytools.WizardOperator;
42 import org.netbeans.jemmy.JemmyProperties;
43 import org.netbeans.jemmy.Timeout;
44 import org.netbeans.jemmy.Timeouts;
45 import org.netbeans.jemmy.operators.JButtonOperator;
46 import org.netbeans.jemmy.operators.JCheckBoxOperator;
47 import org.netbeans.jemmy.operators.JComboBoxOperator;
48 import org.netbeans.jemmy.operators.JDialogOperator;
49 import org.netbeans.jemmy.operators.JFileChooserOperator;
50 import org.netbeans.jemmy.operators.JLabelOperator;
51 import org.netbeans.jemmy.operators.JListOperator;
52 import org.netbeans.jemmy.operators.JTabbedPaneOperator;
53 import org.netbeans.jemmy.operators.JTableOperator;
54 import org.netbeans.jemmy.operators.JTextFieldOperator;
55 import org.netbeans.jemmy.operators.JToggleButtonOperator;
76 if (path.startsWith(
"\\\\")) {
79 if (path.startsWith(
"\\")) {
96 logger.info(
"New Case");
97 NbDialogOperator nbdo =
new NbDialogOperator(title);
98 JButtonOperator jbo =
new JButtonOperator(nbdo, 0);
103 logger.info(
"New Case Wizard");
104 WizardOperator wo =
new WizardOperator(
"New Case Information");
105 JTextFieldOperator jtfo0 =
new JTextFieldOperator(wo, 1);
106 jtfo0.typeText(
"AutopsyTestCase");
107 JTextFieldOperator jtfo1 =
new JTextFieldOperator(wo, 2);
109 wo.btNext().clickMouse();
110 JTextFieldOperator jtfo2 =
new JTextFieldOperator(wo, 0);
111 jtfo2.typeText(
"000");
112 JTextFieldOperator jtfo3 =
new JTextFieldOperator(wo, 1);
113 jtfo3.typeText(
"Examiner 1");
114 start = System.currentTimeMillis();
115 wo.btFinish().clickMouse();
122 new Timeout(
"pausing", 120000).sleep();
123 logger.info(
"Starting Add Image process");
124 WizardOperator wo =
new WizardOperator(
"Add Data Source");
125 wo.setTimeouts(
resetTimeouts(
"WindowWaiter.WaitWindowTimeOut", 240000));
126 while(!wo.btNext().isEnabled()){
127 new Timeout(
"pausing", 1000).sleep();
130 JToggleButtonOperator jtbo =
new JToggleButtonOperator(wo, 0);
132 wo.btNext().clickMouse();
133 JTextFieldOperator jtfo0 =
new JTextFieldOperator(wo, 0);
135 String imageDir = img_path;
136 ((JTextComponent) jtfo0.getSource()).setText(imageDir);
137 JComboBoxOperator comboBoxOperator =
new JComboBoxOperator(wo, 0);
138 comboBoxOperator.setSelectedItem(
"(GMT-5:00) America/New_York");
139 wo.btNext().clickMouse();
146 new Timeout(
"pausing", 120000).sleep();
147 logger.info(
"Starting Add Logical Files process");
148 WizardOperator wo =
new WizardOperator(
"Add Data Source");
149 wo.setTimeouts(
resetTimeouts(
"WindowWaiter.WaitWindowTimeOut", 240000));
150 while(!wo.btNext().isEnabled()){
151 new Timeout(
"pausing", 1000).sleep();
154 JToggleButtonOperator jtbo =
new JToggleButtonOperator(wo, 2);
156 wo.btNext().clickMouse();
157 JButtonOperator addButtonOperator =
new JButtonOperator(wo,
"Add");
158 addButtonOperator.pushNoBlock();
159 JFileChooserOperator fileChooserOperator =
new JFileChooserOperator();
160 fileChooserOperator.setCurrentDirectory(
new File(
getEscapedPath(System.getProperty(
"img_path"))));
162 fileChooserOperator.goUpLevel();
163 fileChooserOperator.chooseFile(
new File(
getEscapedPath(System.getProperty(
"img_path"))).getName());
164 wo.btNext().clickMouse();
168 WizardOperator wo =
new WizardOperator(
"Add Data Source");
169 while (!wo.btFinish().isEnabled()) {
170 new Timeout(
"pausing", 1000).sleep();
172 logger.log(Level.INFO,
"Add image took {0}ms", (System.currentTimeMillis() -
start));
173 wo.btFinish().clickMouse();
181 new Timeout(
"pausing", 10000).sleep();
183 logger.info(
"Looking for hash lookup module in ingest job settings panel");
184 WizardOperator wo =
new WizardOperator(
"Add Data Source");
185 while(!wo.btNext().isEnabled()){
186 new Timeout(
"pausing", 1000).sleep();
188 JTableOperator jto =
new JTableOperator(wo, 0);
189 int row = jto.findCellRow(
"Hash Lookup", 2, 0);
190 jto.clickOnCell(row, 1);
191 logger.info(
"Selected hash lookup module in ingest job settings panel");
192 JButtonOperator jbo1 =
new JButtonOperator(wo,
"Global Settings");
194 logger.info(
"Pushed Global Settings button for hash lookup module in ingest job settings panel");
198 logger.info(
"Hash Configure");
199 JDialog hashMainDialog = JDialogOperator.waitJDialog(
"Global Hash Lookup Settings",
false,
false);
200 JDialogOperator hashMainDialogOperator =
new JDialogOperator(hashMainDialog);
201 List<String> databases =
new ArrayList<>();
203 databases.add(
getEscapedPath(System.getProperty(
"known_bad_path")));
204 databases.stream().map((database) -> {
205 JButtonOperator importButtonOperator =
new JButtonOperator(hashMainDialogOperator,
"Import");
206 importButtonOperator.pushNoBlock();
207 JDialog addDatabaseDialog = JDialogOperator.waitJDialog(
"Import Hash Database",
false,
false);
208 JDialogOperator addDatabaseDialogOperator =
new JDialogOperator(addDatabaseDialog);
209 JButtonOperator browseButtonOperator =
new JButtonOperator(addDatabaseDialogOperator,
"Open...", 0);
210 browseButtonOperator.pushNoBlock();
211 JFileChooserOperator fileChooserOperator =
new JFileChooserOperator();
212 fileChooserOperator.chooseFile(database);
213 JButtonOperator okButtonOperator =
new JButtonOperator(addDatabaseDialogOperator,
"OK", 0);
214 return okButtonOperator;
215 }).map((okButtonOperator) -> {
216 okButtonOperator.pushNoBlock();
217 return okButtonOperator;
218 }).forEach((_item) -> {
219 new Timeout(
"pausing", 1000).sleep();
225 new Timeout(
"pausing", 1000).sleep();
227 JButtonOperator jbo4 =
new JButtonOperator(hashMainDialogOperator,
"OK", 0);
232 logger.info(
"Looking for keyword search module in ingest job settings panel");
233 WizardOperator wo =
new WizardOperator(
"Add Data Source");
234 while(!wo.btNext().isEnabled()){
235 new Timeout(
"pausing", 1000).sleep();
237 JTableOperator jto =
new JTableOperator(wo, 0);
238 int row = jto.findCellRow(
"Keyword Search", 2, 0);
239 jto.clickOnCell(row, 1);
240 logger.info(
"Selected keyword search module in ingest job settings panel");
241 JButtonOperator jbo1 =
new JButtonOperator(wo,
"Global Settings");
243 logger.info(
"Pushed Global Settings button for keyword search module in ingest job settings panel");
247 logger.info(
"Search Configure");
248 JDialog jd = JDialogOperator.waitJDialog(
"Global Keyword Search Settings",
false,
false);
249 JDialogOperator jdo =
new JDialogOperator(jd);
250 String words =
getEscapedPath(System.getProperty(
"keyword_path"));
251 JButtonOperator jbo0 =
new JButtonOperator(jdo,
"Import List", 0);
253 JFileChooserOperator jfco0 =
new JFileChooserOperator();
254 jfco0.chooseFile(words);
255 JTableOperator jto =
new JTableOperator(jdo, 0);
256 jto.clickOnCell(0, 0);
257 new Timeout(
"pausing", 1000).sleep();
258 if (Boolean.parseBoolean(System.getProperty(
"mugen_mode"))) {
259 JTabbedPaneOperator jtpo =
new JTabbedPaneOperator(jdo);
260 jtpo.selectPage(
"String Extraction");
261 JCheckBoxOperator jcbo0 =
new JCheckBoxOperator(jtpo,
"Arabic (Arabic)");
263 JCheckBoxOperator jcbo1 =
new JCheckBoxOperator(jtpo,
"Han (Chinese, Japanese, Korean)");
265 new Timeout(
"pausing", 1000).sleep();
267 JButtonOperator jbo2 =
new JButtonOperator(jdo,
"OK", 0);
269 WizardOperator wo =
new WizardOperator(
"Add Data Source");
270 new Timeout(
"pausing", 10000).sleep();
271 wo.btNext().clickMouse();
275 logger.info(
"Ingest 3");
276 new Timeout(
"pausing", 10000).sleep();
277 long startIngest = System.currentTimeMillis();
280 new Timeout(
"pausing", 1000).sleep();
282 logger.log(Level.INFO,
"Ingest (including enqueue) took {0}ms", (System.currentTimeMillis() - startIngest));
286 Random rand =
new Random();
287 new Timeout(
"pausing", 10000 + (rand.nextInt(15000) + 5000)).sleep();
293 logger.info(
"Generate Report Toolbars");
294 MainWindowOperator mwo = MainWindowOperator.getDefault();
295 JButtonOperator jbo =
new JButtonOperator(mwo,
"Generate Report");
297 new Timeout(
"pausing", 5000).sleep();
301 logger.info(
"Generate Report Button");
302 JDialog reportDialog = JDialogOperator.waitJDialog(
"Generate Report",
false,
false);
303 JDialogOperator reportDialogOperator =
new JDialogOperator(reportDialog);
304 JListOperator listOperator =
new JListOperator(reportDialogOperator);
305 JButtonOperator jbo0 =
new JButtonOperator(reportDialogOperator,
"Next");
306 DateFormat dateFormat =
new SimpleDateFormat(
"MM-dd-yyyy-HH-mm-ss");
307 Date date =
new Date();
308 String datenotime = dateFormat.format(date);
309 listOperator.clickOnItem(0, 1);
310 new Timeout(
"pausing", 2000).sleep();
312 new Timeout(
"pausing", 2000).sleep();
313 JButtonOperator jbo1 =
new JButtonOperator(reportDialogOperator,
"Finish");
315 new Timeout(
"pausing", 1000).sleep();
316 JDialog previewDialog = JDialogOperator.waitJDialog(
"Progress",
false,
false);
318 JDialogOperator previewDialogOperator =
new JDialogOperator(previewDialog);
319 JLabelOperator.waitJLabel(previewDialog,
"Complete",
false,
false);
320 JButtonOperator jbo2 =
new JButtonOperator(previewDialogOperator,
"Close");
322 new Timeout(
"pausing", 10000).sleep();
323 System.setProperty(
"ReportStr", datenotime);
328 logger.info(
"Taking screenshot.");
330 Rectangle screenRect =
new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
331 BufferedImage capture =
new Robot().createScreenCapture(screenRect);
333 ImageIO.write(capture,
"png",
new File(outPath +
"\\" + name +
".png"));
334 new Timeout(
"pausing", 1000).sleep();
335 }
catch (IOException ex) {
336 logger.log(Level.WARNING,
"IOException taking screenshot.", ex);
337 }
catch (AWTException ex) {
338 logger.log(Level.WARNING,
"AWTException taking screenshot.", ex);
349 Timeouts timeouts = JemmyProperties.getCurrentTimeouts();
350 timeouts.setTimeout(name, value);
357 CaseDbConnectionInfo connectionInfo =
new CaseDbConnectionInfo(
358 System.getProperty(
"dbHost"),
359 System.getProperty(
"dbPort"),
360 System.getProperty(
"dbUserName"),
361 System.getProperty(
"dbPassword"),
362 TskData.DbType.POSTGRESQL);
366 logger.log(Level.SEVERE,
"Error saving case database connection info", ex);
373 System.getProperty(
"messageServiceHost"),
374 Integer.parseInt(System.getProperty(
"messageServicePort")),
380 logger.log(Level.SEVERE,
"Error saving messaging service connection info", ex);
void screenshot(String name)
void testConfigureSearch()
static synchronized IngestManager getInstance()
void testGenerateReportToolbar()
void testStartAddLogicalFilesDataSource()
void testConfigureIngest1()
void testAddSourceWizard1()
boolean isIngestRunning()
static String getEscapedPath(String path)
static void setIsMultiUserModeEnabled(boolean enabled)
static void setMessageServiceConnectionInfo(MessageServiceConnectionInfo info)
void setMultiUserPerferences()
static void setDatabaseConnectionInfo(CaseDbConnectionInfo connectionInfo)
Timeouts resetTimeouts(String name, int value)
static void setIndexingServerHost(String hostName)
static void setIndexingServerPort(int port)
void testGenerateReportButton()
void testNewCaseWizardOpen(String title)
AutopsyTestCases(boolean isMultiUser)
static final Logger logger
void testStartAddImageFileDataSource()
void testConfigureIngest2()