diff --git a/hash_longterm.py b/hash_longterm.py index 68f75606fef6a20b539e4007cc9ba047658f5d76..58c2c72db75e663641046db6e550248862f2f7c5 100644 --- a/hash_longterm.py +++ b/hash_longterm.py @@ -74,12 +74,31 @@ if __name__ == "__main__": time.sleep(120) # create hash print(colored(log(f"[Hash-Longtermstudy] The hash prior to the deletion is {drive_handle.generate_hash()}"), "light_blue")) + + # remember cluster for DRAT check + compare_cluster_number: int = drive_handle.get_clusters_for_file(f'{drive_handle.get_path()}demo\\t5\\000503.text')[0] + compare_cluster_values: bytes = drive_handle.read_cluster(compare_cluster_number) + # delete data drive_handle.remove_demo_files() # flush the cache drive_handle.flush_cache() # set drive to read only drive_handle.set_read_only(True) + + # check for DRAT + print(colored(f"[Hash-Longtermstudy] Testing for DRAT/DZAT.", "light_grey")) + cluster_values: bytes = drive_handle.read_cluster(compare_cluster_number) + if (cluster_values != compare_cluster_values): + # DRAT or DZAT + print(colored(f"[Hash-Longtermstudy] Cluster {compare_cluster_number} read a different value immediately after deletion. DRAT or DZAT is likely.", "yellow")) + print(colored("[Hash-Longtermstudy] SSD usage likely due to DRAT/DZAT. Skipping test.", "red")) + drive_handle.set_read_only(False) + # SSD usage likely + pass + else: + print(colored("[Hash-Longtermstudy] No DRAT/DZAT detected.", "yellow")) + # repeadetly create the hash prior_hash: str = None iteration = 0 diff --git a/src/tests/hash_test.py b/src/tests/hash_test.py index e4f6f01e6f0447a45cb076ccd91eaab7507294bf..e25e882f20984676681ecdb7fe09562122ed677c 100644 --- a/src/tests/hash_test.py +++ b/src/tests/hash_test.py @@ -23,10 +23,31 @@ class HashTest(DecisionTest): self._drive_handle.flush_cache() time.sleep(120) print(colored(f"[HashTest] The current hash of the drive is equal to {self._drive_handle.generate_hash()}", "yellow")) + + # remember a cluster of a random file + # if the cluster is set to zero immediately after deletion, + # the likelyhood of DRAT or DZAT is very high + compare_cluster_number: int = self._drive_handle.get_clusters_for_file(f'{self._drive_handle.get_path()}demo\\t5\\000503.text')[0] + compare_cluster_values: bytes = self._drive_handle.read_cluster(compare_cluster_number) + print(colored("[HashTest] Deleting the demo files.", 'light_grey')) self._drive_handle.remove_demo_files() self._drive_handle.flush_cache() self._drive_handle.set_read_only(True) + + # check for DRAT or DZAT + print(colored(f"[HashTest] Testing for DRAT/DZAT.", "light_grey")) + cluster_values: bytes = self._drive_handle.read_cluster(compare_cluster_number) + if (cluster_values != compare_cluster_values): + # DRAT or DZAT + print(colored(f"[HashTest] Cluster {compare_cluster_number} read a different value immediately after deletion. DRAT or DZAT is likely.", "yellow")) + print(colored("[HashTest] SSD usage likely due to DRAT/DZAT. Skipping test.", "red")) + self._drive_handle.set_read_only(False) + # SSD usage likely + return True + else: + print(colored("[HashTest] No DRAT/DZAT detected.", "yellow")) + detected_wear_levelling: bool = False prior_hash: str = None iteration = 0