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");
98 NbDialogOperator nbdo =
new NbDialogOperator(title);
99 JButtonOperator jbo =
new JButtonOperator(nbdo, 0);
104 logger.info(
"New Case Wizard");
105 WizardOperator wo =
new WizardOperator(
"New Case Information");
106 JTextFieldOperator jtfo0 =
new JTextFieldOperator(wo, 1);
107 jtfo0.typeText(
"AutopsyTestCase");
108 JTextFieldOperator jtfo1 =
new JTextFieldOperator(wo, 2);
110 wo.btNext().clickMouse();
111 JTextFieldOperator jtfo2 =
new JTextFieldOperator(wo, 0);
112 jtfo2.typeText(
"000");
113 JTextFieldOperator jtfo3 =
new JTextFieldOperator(wo, 1);
114 jtfo3.typeText(
"Examiner 1");
115 start = System.currentTimeMillis();
116 wo.btFinish().clickMouse();
123 new Timeout(
"pausing", 120000).sleep();
124 logger.info(
"Starting Add Image process");
126 WizardOperator wo =
new WizardOperator(
"Add Data Source");
127 while(!wo.btNext().isEnabled()){
128 new Timeout(
"pausing", 1000).sleep();
131 JToggleButtonOperator jtbo =
new JToggleButtonOperator(wo, 0);
133 wo.btNext().clickMouse();
134 JTextFieldOperator jtfo0 =
new JTextFieldOperator(wo, 0);
136 String imageDir = img_path;
137 ((JTextComponent) jtfo0.getSource()).setText(imageDir);
138 JComboBoxOperator comboBoxOperator =
new JComboBoxOperator(wo, 0);
139 comboBoxOperator.setSelectedItem(
"(GMT-5:00) America/New_York");
140 wo.btNext().clickMouse();
147 new Timeout(
"pausing", 120000).sleep();
148 logger.info(
"Starting Add Logical Files process");
149 WizardOperator wo =
new WizardOperator(
"Add Data Source");
150 wo.setTimeouts(
resetTimeouts(
"WindowWaiter.WaitWindowTimeOut", 240000));
151 while(!wo.btNext().isEnabled()){
152 new Timeout(
"pausing", 1000).sleep();
155 JToggleButtonOperator jtbo =
new JToggleButtonOperator(wo, 2);
157 wo.btNext().clickMouse();
158 JButtonOperator addButtonOperator =
new JButtonOperator(wo,
"Add");
159 addButtonOperator.pushNoBlock();
160 JFileChooserOperator fileChooserOperator =
new JFileChooserOperator();
161 fileChooserOperator.setCurrentDirectory(
new File(
getEscapedPath(System.getProperty(
"img_path"))));
163 fileChooserOperator.goUpLevel();
164 fileChooserOperator.chooseFile(
new File(
getEscapedPath(System.getProperty(
"img_path"))).getName());
165 wo.btNext().clickMouse();
169 WizardOperator wo =
new WizardOperator(
"Add Data Source");
170 while (!wo.btFinish().isEnabled()) {
171 new Timeout(
"pausing", 1000).sleep();
173 logger.log(Level.INFO,
"Add image took {0}ms", (System.currentTimeMillis() -
start));
174 wo.btFinish().clickMouse();
182 new Timeout(
"pausing", 10000).sleep();
184 logger.info(
"Looking for hash lookup module in ingest job settings panel");
185 WizardOperator wo =
new WizardOperator(
"Add Data Source");
186 while(!wo.btNext().isEnabled()){
187 new Timeout(
"pausing", 1000).sleep();
189 JTableOperator jto =
new JTableOperator(wo, 0);
190 int row = jto.findCellRow(
"Hash Lookup", 2, 0);
191 jto.clickOnCell(row, 1);
192 logger.info(
"Selected hash lookup module in ingest job settings panel");
193 JButtonOperator jbo1 =
new JButtonOperator(wo,
"Global Settings");
195 logger.info(
"Pushed Global Settings button for hash lookup module in ingest job settings panel");
199 logger.info(
"Hash Configure");
200 JDialog hashMainDialog = JDialogOperator.waitJDialog(
"Global Hash Lookup Settings",
false,
false);
201 JDialogOperator hashMainDialogOperator =
new JDialogOperator(hashMainDialog);
202 List<String> databases =
new ArrayList<>();
204 databases.add(
getEscapedPath(System.getProperty(
"known_bad_path")));
205 databases.stream().map((database) -> {
206 JButtonOperator importButtonOperator =
new JButtonOperator(hashMainDialogOperator,
"Import");
207 importButtonOperator.pushNoBlock();
208 JDialog addDatabaseDialog = JDialogOperator.waitJDialog(
"Import Hash Database",
false,
false);
209 JDialogOperator addDatabaseDialogOperator =
new JDialogOperator(addDatabaseDialog);
210 JButtonOperator browseButtonOperator =
new JButtonOperator(addDatabaseDialogOperator,
"Open...", 0);
211 browseButtonOperator.pushNoBlock();
212 JFileChooserOperator fileChooserOperator =
new JFileChooserOperator();
213 fileChooserOperator.chooseFile(database);
214 JButtonOperator okButtonOperator =
new JButtonOperator(addDatabaseDialogOperator,
"OK", 0);
215 return okButtonOperator;
216 }).map((okButtonOperator) -> {
217 okButtonOperator.pushNoBlock();
218 return okButtonOperator;
219 }).forEach((_item) -> {
220 new Timeout(
"pausing", 1000).sleep();
226 new Timeout(
"pausing", 1000).sleep();
228 JButtonOperator jbo4 =
new JButtonOperator(hashMainDialogOperator,
"OK", 0);
233 logger.info(
"Looking for keyword search module in ingest job settings panel");
234 WizardOperator wo =
new WizardOperator(
"Add Data Source");
235 while(!wo.btNext().isEnabled()){
236 new Timeout(
"pausing", 1000).sleep();
238 JTableOperator jto =
new JTableOperator(wo, 0);
239 int row = jto.findCellRow(
"Keyword Search", 2, 0);
240 jto.clickOnCell(row, 1);
241 logger.info(
"Selected keyword search module in ingest job settings panel");
242 JButtonOperator jbo1 =
new JButtonOperator(wo,
"Global Settings");
244 logger.info(
"Pushed Global Settings button for keyword search module in ingest job settings panel");
248 logger.info(
"Search Configure");
249 JDialog jd = JDialogOperator.waitJDialog(
"Global Keyword Search Settings",
false,
false);
250 JDialogOperator jdo =
new JDialogOperator(jd);
251 String words =
getEscapedPath(System.getProperty(
"keyword_path"));
252 JButtonOperator jbo0 =
new JButtonOperator(jdo,
"Import List", 0);
254 JFileChooserOperator jfco0 =
new JFileChooserOperator();
255 jfco0.chooseFile(words);
256 JTableOperator jto =
new JTableOperator(jdo, 0);
257 jto.clickOnCell(0, 0);
258 new Timeout(
"pausing", 1000).sleep();
259 if (Boolean.parseBoolean(System.getProperty(
"mugen_mode"))) {
260 JTabbedPaneOperator jtpo =
new JTabbedPaneOperator(jdo);
261 jtpo.selectPage(
"String Extraction");
262 JCheckBoxOperator jcbo0 =
new JCheckBoxOperator(jtpo,
"Arabic (Arabic)");
264 JCheckBoxOperator jcbo1 =
new JCheckBoxOperator(jtpo,
"Han (Chinese, Japanese, Korean)");
266 new Timeout(
"pausing", 1000).sleep();
268 JButtonOperator jbo2 =
new JButtonOperator(jdo,
"OK", 0);
270 WizardOperator wo =
new WizardOperator(
"Add Data Source");
271 new Timeout(
"pausing", 10000).sleep();
272 wo.btNext().clickMouse();
276 logger.info(
"Ingest 3");
277 new Timeout(
"pausing", 10000).sleep();
278 long startIngest = System.currentTimeMillis();
281 new Timeout(
"pausing", 1000).sleep();
283 logger.log(Level.INFO,
"Ingest (including enqueue) took {0}ms", (System.currentTimeMillis() - startIngest));
287 Random rand =
new Random();
288 new Timeout(
"pausing", 10000 + (rand.nextInt(15000) + 5000)).sleep();
294 logger.info(
"Generate Report Toolbars");
295 MainWindowOperator mwo = MainWindowOperator.getDefault();
296 JButtonOperator jbo =
new JButtonOperator(mwo,
"Generate Report");
298 new Timeout(
"pausing", 5000).sleep();
302 logger.info(
"Generate Report Button");
303 resetTimeouts(
"ComponentOperator.WaitComponentTimeout", 240000);
304 JDialog reportDialog = JDialogOperator.waitJDialog(
"Generate Report",
false,
false);
305 JDialogOperator reportDialogOperator =
new JDialogOperator(reportDialog);
306 JListOperator listOperator =
new JListOperator(reportDialogOperator);
307 JButtonOperator jbo0 =
new JButtonOperator(reportDialogOperator,
"Next");
308 DateFormat dateFormat =
new SimpleDateFormat(
"MM-dd-yyyy-HH-mm-ss");
309 Date date =
new Date();
310 String datenotime = dateFormat.format(date);
311 listOperator.clickOnItem(0, 1);
313 new Timeout(
"pausing", 2000).sleep();
314 JButtonOperator jbo1 =
new JButtonOperator(reportDialogOperator,
"Finish");
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()