From a7ad24d2cb61d84cf2846f8fa43af31f0597043e Mon Sep 17 00:00:00 2001 From: Rasheed Elsaleh Date: Thu, 25 Mar 2021 16:45:30 -0400 Subject: [PATCH] Add dir parser Add usage commands Fix example options update dir.md --- docgen.sh | 1 + docs/parsers/dir.md | 286 ++++++++++++++++++++ jc/cli.py | 1 + jc/parsers/dir.py | 332 ++++++++++++++++++++++++ tests/fixtures/windows-10/dir-C.json | 1 + tests/fixtures/windows-10/dir-C.out | 21 ++ tests/fixtures/windows-10/dir-ODTC.json | 1 + tests/fixtures/windows-10/dir-ODTC.out | 21 ++ tests/fixtures/windows-10/dir-Q.json | 1 + tests/fixtures/windows-10/dir-Q.out | 21 ++ tests/fixtures/windows-10/dir.json | 1 + tests/fixtures/windows-10/dir.out | 21 ++ tests/test_dir.py | 64 +++++ 13 files changed, 772 insertions(+) create mode 100644 docs/parsers/dir.md create mode 100644 jc/parsers/dir.py create mode 100644 tests/fixtures/windows-10/dir-C.json create mode 100644 tests/fixtures/windows-10/dir-C.out create mode 100644 tests/fixtures/windows-10/dir-ODTC.json create mode 100644 tests/fixtures/windows-10/dir-ODTC.out create mode 100644 tests/fixtures/windows-10/dir-Q.json create mode 100644 tests/fixtures/windows-10/dir-Q.out create mode 100644 tests/fixtures/windows-10/dir.json create mode 100644 tests/fixtures/windows-10/dir.out create mode 100644 tests/test_dir.py diff --git a/docgen.sh b/docgen.sh index 96fb2ab3..cc12ffb5 100755 --- a/docgen.sh +++ b/docgen.sh @@ -17,6 +17,7 @@ pydocmd simple jc.parsers.csv+ > ../docs/parsers/csv.md pydocmd simple jc.parsers.date+ > ../docs/parsers/date.md pydocmd simple jc.parsers.df+ > ../docs/parsers/df.md pydocmd simple jc.parsers.dig+ > ../docs/parsers/dig.md +pydocmd simple jc.parsers.dir+ > ../docs/parsers/dir.md pydocmd simple jc.parsers.dmidecode+ > ../docs/parsers/dmidecode.md pydocmd simple jc.parsers.du+ > ../docs/parsers/du.md pydocmd simple jc.parsers.env+ > ../docs/parsers/env.md diff --git a/docs/parsers/dir.md b/docs/parsers/dir.md new file mode 100644 index 00000000..4bb47213 --- /dev/null +++ b/docs/parsers/dir.md @@ -0,0 +1,286 @@ + +# jc.parsers.dir +jc - JSON CLI output utility `dir` command output parser + +Options supported: +- `/T timefield` +- `/O sortorder` +- `/C, /-C` +- `/Q` + +Usage (cli): + + $ dir | jc --dir -p -m + + or + + $ jc -p -m dir + +Usage (module): + + import jc.parsers.dir + result = jc.parsers.dir.parse(dir_command_output) + +Compatibility: + + 'win32' + +Examples: + + $ dir | jc --dir -p -m + [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": "", + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 54784, + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": null, + "size": 0, + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 54784, + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 515072, + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 504832, + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 224768, + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 421888, + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": null, + "size": 819136, + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 48536, + "filename": "sqmapi.dll" + } + ] + + + $ dir | jc --dir -p -m -r + [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": "", + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "54,784", + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": null, + "size": "0", + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "54,784", + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "515,072", + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "504,832", + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "224,768", + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "421,888", + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": null, + "size": "819,136", + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "48,536", + "filename": "sqmapi.dll" + } + ] + + + +## info +```python +info() +``` + + +## process +```python +process(proc_data) +``` + +Final processing to conform to the schema. + +Parameters: + + proc_data: (List of Dictionaries) raw structured data to process + +Returns: + + List of Dictionaries. Structured data with the following schema: + + [ + { + "date": string, + "time": string, + "dir": string, + "size": integer, + "filename: string + } + ] + + +## parse +```python +parse(data, raw=False, quiet=False) +``` + +Main text parsing function + +Parameters: + + data: (string) text data to parse + raw: (boolean) output preprocessed JSON if True + quiet: (boolean) suppress warning messages if True + +Returns: + + List of Dictionaries. Raw or processed structured data. + + diff --git a/jc/cli.py b/jc/cli.py index a76b9fbe..36d8ef2e 100644 --- a/jc/cli.py +++ b/jc/cli.py @@ -42,6 +42,7 @@ parsers = [ 'date', 'df', 'dig', + 'dir', 'dmidecode', 'du', 'env', diff --git a/jc/parsers/dir.py b/jc/parsers/dir.py new file mode 100644 index 00000000..4cb57bfb --- /dev/null +++ b/jc/parsers/dir.py @@ -0,0 +1,332 @@ +"""jc - JSON CLI output utility `dir` command output parser + +Options supported: +- `/T timefield` +- `/O sortorder` +- `/C, /-C` +- `/Q` + +Usage (cli): + + $ dir | jc --dir -p -m + + or + + $ jc -p -m dir + +Usage (module): + + import jc.parsers.dir + result = jc.parsers.dir.parse(dir_command_output) + +Compatibility: + + 'win32' + +Examples: + + $ dir | jc --dir -p -m + [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": "", + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 54784, + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": null, + "size": 0, + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 54784, + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 515072, + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 504832, + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 224768, + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 421888, + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": null, + "size": 819136, + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": 48536, + "filename": "sqmapi.dll" + } + ] + + + $ dir | jc --dir -p -m -r + [ + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": "." + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": "", + "size": null, + "filename": ".." + }, + { + "date": "12/07/2019", + "time": "02:49 AM", + "dir": "", + "size": null, + "filename": "en-US" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "54,784", + "filename": "ExtExport.exe" + }, + { + "date": "03/24/2021", + "time": "03:15 PM", + "dir": null, + "size": "0", + "filename": "file name.txt" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "54,784", + "filename": "hmmapi.dll" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "515,072", + "filename": "iediagcmd.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "504,832", + "filename": "ieinstal.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "224,768", + "filename": "ielowutil.exe" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "421,888", + "filename": "IEShims.dll" + }, + { + "date": "12/06/2019", + "time": "02:47 PM", + "dir": null, + "size": "819,136", + "filename": "iexplore.exe" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "images" + }, + { + "date": "12/07/2019", + "time": "02:14 AM", + "dir": "", + "size": null, + "filename": "SIGNUP" + }, + { + "date": "12/07/2019", + "time": "02:09 AM", + "dir": null, + "size": "48,536", + "filename": "sqmapi.dll" + } + ] + +""" +import re +import jc.utils + + +class info(): + version = '1.0' + description = 'dir command parser' + author = 'Rasheed Elsaleh' + author_email = 'rasheed@rebelliondefense.com' + + # compatible options: win32 + compatible = ['win32'] + magic_commands = ['dir'] + + +__version__ = info.version + + +def process(proc_data): + """ + Final processing to conform to the schema. + + Parameters: + + proc_data: (List of Dictionaries) raw structured data to process + + Returns: + + List of Dictionaries. Structured data with the following schema: + + [ + { + "date": string, + "time": string, + "dir": string, + "size": integer, + "filename: string + } + ] + """ + + for entry in proc_data: + int_list = ["size"] + for key in int_list: + if entry.get(key): + try: + key_int = int(entry[key].replace(",", "")) + except ValueError: + entry[key] = None + else: + entry[key] = key_int + return proc_data + + +def parse(data, raw=False, quiet=False): + """ + Main text parsing function + + Parameters: + + data: (string) text data to parse + raw: (boolean) output preprocessed JSON if True + quiet: (boolean) suppress warning messages if True + + Returns: + + List of Dictionaries. Raw or processed structured data. + + """ + if not quiet: + jc.utils.compatibility(__name__, info.compatible) + + raw_output = [] + + if jc.utils.has_data(data): + + for line in data.splitlines(): + # look for first line that starts with a date + if not re.match(r'^\d{2}/\d{2}/\d{4}', line): + continue + + output_line = {} + parsed_line = line.split() + output_line["date"] = parsed_line[0] + output_line["time"] = " ".join(parsed_line[1:3]) + output_line.setdefault("dir", None) + output_line.setdefault("size", None) + if parsed_line[3] == "": + output_line["dir"] = parsed_line[3] + else: + output_line["size"] = parsed_line[3] + + output_line["filename"] = " ".join(parsed_line[4:]) + raw_output.append(output_line) + + if raw: + return raw_output + else: + return process(raw_output) diff --git a/tests/fixtures/windows-10/dir-C.json b/tests/fixtures/windows-10/dir-C.json new file mode 100644 index 00000000..b7860aff --- /dev/null +++ b/tests/fixtures/windows-10/dir-C.json @@ -0,0 +1 @@ +[{"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "ExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": null, "size": 819136, "filename": "iexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 48536, "filename": "sqmapi.dll"}] \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-C.out b/tests/fixtures/windows-10/dir-C.out new file mode 100644 index 00000000..42bc4e19 --- /dev/null +++ b/tests/fixtures/windows-10/dir-C.out @@ -0,0 +1,21 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Program Files\Internet Explorer + +03/24/2021 03:15 PM . +03/24/2021 03:15 PM .. +12/07/2019 02:49 AM en-US +12/07/2019 02:09 AM 54784 ExtExport.exe +03/24/2021 03:15 PM 0 file name.txt +12/07/2019 02:09 AM 54784 hmmapi.dll +12/07/2019 02:09 AM 515072 iediagcmd.exe +12/07/2019 02:09 AM 504832 ieinstal.exe +12/07/2019 02:09 AM 224768 ielowutil.exe +12/07/2019 02:09 AM 421888 IEShims.dll +12/06/2019 02:47 PM 819136 iexplore.exe +12/07/2019 02:14 AM images +12/07/2019 02:14 AM SIGNUP +12/07/2019 02:09 AM 48536 sqmapi.dll + 9 File(s) 2643800 bytes + 5 Dir(s) 36206153728 bytes free diff --git a/tests/fixtures/windows-10/dir-ODTC.json b/tests/fixtures/windows-10/dir-ODTC.json new file mode 100644 index 00000000..a767c2f5 --- /dev/null +++ b/tests/fixtures/windows-10/dir-ODTC.json @@ -0,0 +1 @@ +[{"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "ExtExport.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 48536, "filename": "sqmapi.dll"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:49 AM", "dir": null, "size": 819136, "filename": "iexplore.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "file name.txt"}] \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-ODTC.out b/tests/fixtures/windows-10/dir-ODTC.out new file mode 100644 index 00000000..431dd8f4 --- /dev/null +++ b/tests/fixtures/windows-10/dir-ODTC.out @@ -0,0 +1,21 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Program Files\Internet Explorer + +12/07/2019 02:09 AM 54,784 hmmapi.dll +12/07/2019 02:09 AM 224,768 ielowutil.exe +12/07/2019 02:09 AM 54,784 ExtExport.exe +12/07/2019 02:09 AM 515,072 iediagcmd.exe +12/07/2019 02:09 AM 421,888 IEShims.dll +12/07/2019 02:09 AM 504,832 ieinstal.exe +12/07/2019 02:09 AM 48,536 sqmapi.dll +12/07/2019 02:14 AM images +12/07/2019 02:14 AM .. +12/07/2019 02:14 AM SIGNUP +12/07/2019 02:14 AM . +12/07/2019 02:49 AM en-US +12/07/2019 02:49 AM 819,136 iexplore.exe +03/24/2021 03:15 PM 0 file name.txt + 9 File(s) 2,643,800 bytes + 5 Dir(s) 35,231,817,728 bytes free diff --git a/tests/fixtures/windows-10/dir-Q.json b/tests/fixtures/windows-10/dir-Q.json new file mode 100644 index 00000000..32fef660 --- /dev/null +++ b/tests/fixtures/windows-10/dir-Q.json @@ -0,0 +1 @@ +[{"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInsta."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInsta.."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInstaen-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "NT SERVICE\\TrustedInstaExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "BUILTIN\\Administrators file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "NT SERVICE\\TrustedInstahmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "NT SERVICE\\TrustedInstaiediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "NT SERVICE\\TrustedInstaieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "NT SERVICE\\TrustedInstaielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "NT SERVICE\\TrustedInstaIEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": null, "size": 819136, "filename": "NT SERVICE\\TrustedInstaiexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "NT SERVICE\\TrustedInstaimages"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "NT AUTHORITY\\SYSTEM SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 48536, "filename": "NT SERVICE\\TrustedInstasqmapi.dll"}] \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir-Q.out b/tests/fixtures/windows-10/dir-Q.out new file mode 100644 index 00000000..a3123b39 --- /dev/null +++ b/tests/fixtures/windows-10/dir-Q.out @@ -0,0 +1,21 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Program Files\Internet Explorer + +03/24/2021 03:15 PM NT SERVICE\TrustedInsta. +03/24/2021 03:15 PM NT SERVICE\TrustedInsta.. +12/07/2019 02:49 AM NT SERVICE\TrustedInstaen-US +12/07/2019 02:09 AM 54,784 NT SERVICE\TrustedInstaExtExport.exe +03/24/2021 03:15 PM 0 BUILTIN\Administrators file name.txt +12/07/2019 02:09 AM 54,784 NT SERVICE\TrustedInstahmmapi.dll +12/07/2019 02:09 AM 515,072 NT SERVICE\TrustedInstaiediagcmd.exe +12/07/2019 02:09 AM 504,832 NT SERVICE\TrustedInstaieinstal.exe +12/07/2019 02:09 AM 224,768 NT SERVICE\TrustedInstaielowutil.exe +12/07/2019 02:09 AM 421,888 NT SERVICE\TrustedInstaIEShims.dll +12/06/2019 02:47 PM 819,136 NT SERVICE\TrustedInstaiexplore.exe +12/07/2019 02:14 AM NT SERVICE\TrustedInstaimages +12/07/2019 02:14 AM NT AUTHORITY\SYSTEM SIGNUP +12/07/2019 02:09 AM 48,536 NT SERVICE\TrustedInstasqmapi.dll + 9 File(s) 2,643,800 bytes + 5 Dir(s) 36,203,749,376 bytes free diff --git a/tests/fixtures/windows-10/dir.json b/tests/fixtures/windows-10/dir.json new file mode 100644 index 00000000..b7860aff --- /dev/null +++ b/tests/fixtures/windows-10/dir.json @@ -0,0 +1 @@ +[{"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": "."}, {"date": "03/24/2021", "time": "03:15 PM", "dir": "", "size": null, "filename": ".."}, {"date": "12/07/2019", "time": "02:49 AM", "dir": "", "size": null, "filename": "en-US"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "ExtExport.exe"}, {"date": "03/24/2021", "time": "03:15 PM", "dir": null, "size": 0, "filename": "file name.txt"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 54784, "filename": "hmmapi.dll"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 515072, "filename": "iediagcmd.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 504832, "filename": "ieinstal.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 224768, "filename": "ielowutil.exe"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 421888, "filename": "IEShims.dll"}, {"date": "12/06/2019", "time": "02:47 PM", "dir": null, "size": 819136, "filename": "iexplore.exe"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "images"}, {"date": "12/07/2019", "time": "02:14 AM", "dir": "", "size": null, "filename": "SIGNUP"}, {"date": "12/07/2019", "time": "02:09 AM", "dir": null, "size": 48536, "filename": "sqmapi.dll"}] \ No newline at end of file diff --git a/tests/fixtures/windows-10/dir.out b/tests/fixtures/windows-10/dir.out new file mode 100644 index 00000000..6da83337 --- /dev/null +++ b/tests/fixtures/windows-10/dir.out @@ -0,0 +1,21 @@ + Volume in drive C has no label. + Volume Serial Number is 246B-3B5A + + Directory of C:\Program Files\Internet Explorer + +03/24/2021 03:15 PM . +03/24/2021 03:15 PM .. +12/07/2019 02:49 AM en-US +12/07/2019 02:09 AM 54,784 ExtExport.exe +03/24/2021 03:15 PM 0 file name.txt +12/07/2019 02:09 AM 54,784 hmmapi.dll +12/07/2019 02:09 AM 515,072 iediagcmd.exe +12/07/2019 02:09 AM 504,832 ieinstal.exe +12/07/2019 02:09 AM 224,768 ielowutil.exe +12/07/2019 02:09 AM 421,888 IEShims.dll +12/06/2019 02:47 PM 819,136 iexplore.exe +12/07/2019 02:14 AM images +12/07/2019 02:14 AM SIGNUP +12/07/2019 02:09 AM 48,536 sqmapi.dll + 9 File(s) 2,643,800 bytes + 5 Dir(s) 36,207,603,712 bytes free diff --git a/tests/test_dir.py b/tests/test_dir.py new file mode 100644 index 00000000..b6a908ac --- /dev/null +++ b/tests/test_dir.py @@ -0,0 +1,64 @@ +import os +import json +import unittest +import jc.parsers.dir + +THIS_DIR = os.path.dirname(os.path.abspath(__file__)) + + +class MyTests(unittest.TestCase): + + def setUp(self): + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-ODTC.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_ODTC = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-ODTC.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_ODTC_json = json.loads(f.read()) + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-C.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_C = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-Q.out'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_Q = f.read() + + with open(os.path.join(THIS_DIR, os.pardir, 'tests/fixtures/windows-10/dir-Q.json'), + 'r', encoding='utf-8') as f: + self.windows_10_dir_Q_json = json.loads(f.read()) + + def test_dir_error(self): + self.assertEqual(jc.parsers.dir.parse("Access is denied.", quiet=True), []) + + def test_dir_empty(self): + self.assertEqual(jc.parsers.dir.parse("", quiet=True), []) + + def test_dir_windows_10(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir, quiet=True), + self.windows_10_dir_json) + + def test_dir_windows_10_ODTC(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_ODTC, quiet=True), + self.windows_10_dir_ODTC_json) + + def test_dir_windows_10_C(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_C, quiet=True), + self.windows_10_dir_json) + + def test_dir_windows_10_Q(self): + self.assertEqual(jc.parsers.dir.parse(self.windows_10_dir_Q, quiet=True), + self.windows_10_dir_Q_json) + + +if __name__ == '__main__': + unittest.main()