]> git.scottworley.com Git - annex-ec/blobdiff - annex-ec-test
tests: Factor out has_been_deleted()
[annex-ec] / annex-ec-test
index 20363f816068a930c5aebac9233c7f1a3853b7fb..9858db1155decb0f994a6a1ae9096b45989bcf89 100755 (executable)
@@ -41,28 +41,31 @@ make_test_vols() {
   sync_everything
 }
 
+has_been_deleted() {
+  for already_deleted in "${deleted_vols[@]}";do
+    if [[ "$1" == "$already_deleted" ]];then return 0; fi
+  done
+  return 1
+}
+
 sync_everything() {
   for vol in "${vols[@]}";do
-    for already_deleted in "${deleted_vols[@]}";do
-      if [[ "$vol" == "$already_deleted" ]];then continue 2; fi
-    done
+    if has_been_deleted "$vol";then continue; fi
     git -C "$(vol_dir "$vol")" annex sync
   done
 }
 
 fsck_everything() {
   for vol in "${vols[@]}";do
-    for already_deleted in "${deleted_vols[@]}";do
-      if [[ "$vol" == "$already_deleted" ]];then continue 2; fi
-    done
-    git -C "$(vol_dir "$vol")" annex fsck
+    if has_been_deleted "$vol";then continue; fi
+    pushd "$(vol_dir "$vol")"
+      git annex fsck -- *-*
+    popd
   done
 }
 
 delete_test_vol() {
-  for already_deleted in "${deleted_vols[@]}";do
-    if [[ "$1" == "$already_deleted" ]];then return; fi
-  done
+  if has_been_deleted "$vol";then return; fi
   d="$(vol_dir "$1")"
   if [[ -d "$d/.git/annex/objects" ]];then
     chmod -R +w "$d/.git/annex/objects"
@@ -72,9 +75,7 @@ delete_test_vol() {
 
   # Find a not-yet-deleted volume (if there is one) and report the deleted volume as dead
   for vol in "${vols[@]}";do
-    for already_deleted in "${deleted_vols[@]}";do
-      if [[ "$vol" == "$already_deleted" ]];then continue 2; fi
-    done
+    if has_been_deleted "$vol";then continue; fi
     git -C "$(vol_dir "$vol")" annex dead "$(vol_name "$1")"
     break
   done
@@ -107,19 +108,28 @@ make_test_file() {
   echo "$f"
 }
 
-choose_volumes() {
+some_random_volume_names() {
   x=$(for vol in "${vols[@]}";do
         vol_name "$vol"
       done | shuf | head -n "$1" | tr \\n ,)
   echo "${x%,}"
 }
 
+a_random_volume_dir() {
+  while true;do
+    vol="${vols[$RANDOM % $num_vols]}"
+    if has_been_deleted "$vol";then continue; fi
+    vol_dir "$vol"
+    break
+  done
+}
+
 MIN_REDUNDANCY=1
 MIN_FILES=2 # If you only have one file in a group, you'd just make copies of it, no need for annex-ec
 MIN_VOLUMES=$((MIN_REDUNDANCY + MIN_FILES))
 
 for (( num_vols=MIN_VOLUMES; num_vols <= 10; num_vols++ ));do
-  for (( redundancy=1; redundancy < num_vols-2; redundancy++ ));do
+  for (( redundancy=1; redundancy <= num_vols-2; redundancy++ ));do
     max_files=$(( num_vols - redundancy ))
     for (( num_files=MIN_FILES; num_files <= max_files; num_files++ ));do
       make_test_vols "$num_vols"
@@ -129,17 +139,23 @@ for (( num_vols=MIN_VOLUMES; num_vols <= 10; num_vols++ ));do
       done
       sync_everything
       sync_everything
-      pushd "$(vol_dir "${vols[$RANDOM % $num_vols]}")"
-        cmd=(annex-ec -r "$redundancy" -v "$(choose_volumes $((num_files+redundancy)))" "${files[@]}")
+      pushd "$(a_random_volume_dir)"
+        cmd=(annex-ec -r "$redundancy" -v "$(some_random_volume_names $((num_files+redundancy)))" "${files[@]}")
         echo "In $PWD , running ${cmd[*]}" >&2
         "${cmd[@]}"
       popd
       sync_everything
+      sync_everything
       fsck_everything
+
       delete_some_test_vols "$redundancy"
-      # TODO: Recover
+      pushd "$(a_random_volume_dir)"
+        annex-ec-recover -- *-*
+      popd
+
       sync_everything
-      # fsck_everything # Skip this check until recovery is implemented
+      sync_everything
+      fsck_everything
       delete_all_test_vols
     done
   done