@@ -2240,6 +2240,96 @@ def test_app_backend(self) -> None:
22402240 )
22412241 self .assertEqual (resp .status_code , 200 )
22422242
2243+ # backup and restoring directories
2244+
2245+ directory = "dir1"
2246+ files = ["some.data" , "other.data" , "my.db" ]
2247+
2248+ # upload files
2249+ for file in files :
2250+ resp = requests .put (
2251+ f"{ self .apps } /ega/files/{ directory } /{ file } " ,
2252+ data = lazy_file_reader (self .so_sweet ),
2253+ headers = headers ,
2254+ )
2255+ self .assertEqual (resp .status_code , 201 )
2256+
2257+ # verify files are uploaded
2258+ resp = requests .get (
2259+ f"{ self .apps } /ega/files/{ directory } " ,
2260+ headers = headers ,
2261+ )
2262+ self .assertEqual (resp .status_code , 200 )
2263+ for file in json .loads (resp .text ).get ("files" ):
2264+ self .assertTrue (file .get ("filename" ) in files )
2265+
2266+ resp = requests .delete (
2267+ f"{ self .apps } /ega/files/{ directory } " ,
2268+ headers = headers ,
2269+ )
2270+ self .assertEqual (resp .status_code , 200 )
2271+
2272+ # verify deletion
2273+ for file in files :
2274+ resp = requests .get (
2275+ f"{ self .apps } /ega/files/{ directory } /{ file } " ,
2276+ headers = headers ,
2277+ )
2278+ self .assertEqual (resp .status_code , 404 )
2279+
2280+ # check the backup
2281+ resp = requests .get (
2282+ f"{ self .apps } /ega/backup/files/{ directory } " ,
2283+ headers = headers ,
2284+ )
2285+ self .assertEqual (resp .status_code , 200 )
2286+ for file in json .loads (resp .text ).get ("files" ):
2287+ self .assertTrue (file .get ("filename" ) in files )
2288+
2289+ # restore the directory
2290+ resp = requests .post (
2291+ f"{ self .apps } /ega/backup/files/{ directory } ?restore" ,
2292+ headers = headers ,
2293+ )
2294+ self .assertEqual (resp .status_code , 200 )
2295+ # FIXME: the API returns [] in restores for directory restorations, needs to be addressed and tested
2296+ # self.assertEqual(len(json.loads(resp.text).get("restores")), len(files))
2297+
2298+ # check the restored files
2299+ resp = requests .get (
2300+ f"{ self .apps } /ega/files/{ directory } " ,
2301+ headers = headers ,
2302+ )
2303+ self .assertEqual (resp .status_code , 200 )
2304+ for file in json .loads (resp .text ).get ("files" ):
2305+ self .assertTrue (file .get ("filename" ) in files )
2306+
2307+ # remove the directory completely
2308+ resp = requests .delete (
2309+ f"{ self .apps } /ega/files/{ directory } " ,
2310+ headers = headers ,
2311+ )
2312+ self .assertEqual (resp .status_code , 200 )
2313+ resp = requests .delete (
2314+ f"{ self .apps } /ega/backup/files/{ directory } " ,
2315+ headers = headers ,
2316+ )
2317+ self .assertEqual (resp .status_code , 200 )
2318+
2319+ # verify deletion
2320+ for file in files :
2321+ resp = requests .get (
2322+ f"{ self .apps } /ega/files/{ directory } /{ file } " ,
2323+ headers = headers ,
2324+ )
2325+ self .assertEqual (resp .status_code , 404 )
2326+ for file in files :
2327+ resp = requests .get (
2328+ f"{ self .apps } /ega/backup/files/{ directory } /{ file } " ,
2329+ headers = headers ,
2330+ )
2331+ self .assertEqual (resp .status_code , 404 )
2332+
22432333 def test_app_backend_encryption (self ) -> None :
22442334 """Test app backend with encrypted retrieval of data."""
22452335
0 commit comments