Coverage for tests/test_webdavutils.py : 46%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# This file is part of daf_butler.
2#
3# Developed for the LSST Data Management System.
4# This product includes software developed by the LSST Project
5# (http://www.lsst.org).
6# See the COPYRIGHT file at the top-level directory of this distribution
7# for details of code ownership.
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
22import unittest
23import requests
24import responses
27from lsst.daf.butler.core.webdavutils import (folderExists, webdavCheckFileExists,
28 _getFileURL, webdavDeleteFile, isWebdavEndpoint)
29from lsst.daf.butler import Location, ButlerURI
32class WebdavUtilsTestCase(unittest.TestCase):
33 """Test for the Webdav related utilities.
34 """
35 session = requests.Session()
36 serverRoot = "www.lsstwithwebdav.orgx"
37 wrongRoot = "www.lsstwithoutwebdav.org"
38 existingfolderName = "testFolder"
39 notExistingfolderName = "testFolder_not_exist"
40 existingfileName = "testFileName"
41 notExistingfileName = "testFileName_not_exist"
43 def setUp(self):
44 # Used by folderExists()
45 responses.add(responses.HEAD, f"https://{self.serverRoot}/{self.existingfolderName}", status=200)
46 responses.add(responses.HEAD, f"https://{self.serverRoot}/{self.notExistingfolderName}", status=404)
48 # Used by webdavCheckFileExists()
49 responses.add(responses.HEAD,
50 f"https://{self.serverRoot}/{self.existingfolderName}/{self.existingfileName}",
51 status=200, headers={"Content-Length": "1024"})
52 responses.add(responses.HEAD,
53 f"https://{self.serverRoot}/{self.existingfolderName}/{self.notExistingfileName}",
54 status=404)
56 # Used by webdavDeleteFile()
57 responses.add(responses.DELETE,
58 f"https://{self.serverRoot}/{self.existingfolderName}/{self.existingfileName}",
59 status=200)
60 responses.add(responses.DELETE,
61 f"https://{self.serverRoot}/{self.existingfolderName}/{self.notExistingfileName}",
62 status=404)
64 # Used by isWebdavEndpoint()
65 responses.add(responses.OPTIONS, f"https://{self.serverRoot}", status=200, headers={"DAV": "1,2,3"})
66 responses.add(responses.OPTIONS, f"https://{self.wrongRoot}", status=200)
68 @responses.activate
69 def testFolderExists(self):
71 self.assertTrue(folderExists(f"https://{self.serverRoot}/{self.existingfolderName}",
72 session=self.session))
73 self.assertFalse(folderExists(f"https://{self.serverRoot}/{self.notExistingfolderName}",
74 session=self.session))
76 @responses.activate
77 def testWebdavCheckFileExists(self):
79 self.assertTrue(webdavCheckFileExists(
80 f"https://{self.serverRoot}/{self.existingfolderName}/{self.existingfileName}",
81 session=self.session)[0])
82 self.assertFalse(webdavCheckFileExists(
83 f"https://{self.serverRoot}/{self.existingfolderName}/{self.notExistingfileName}",
84 session=self.session)[0])
86 @responses.activate
87 def testWebdavDeleteFile(self):
89 self.assertIsNone(webdavDeleteFile(
90 f"https://{self.serverRoot}/{self.existingfolderName}/{self.existingfileName}",
91 session=self.session))
92 with self.assertRaises(FileNotFoundError):
93 webdavDeleteFile(
94 f"https://{self.serverRoot}/{self.existingfolderName}/{self.notExistingfileName}",
95 session=self.session)
97 @responses.activate
98 def testIsWebdavEndpoint(self):
100 self.assertTrue(isWebdavEndpoint(f"https://{self.serverRoot}"))
101 self.assertFalse(isWebdavEndpoint(f"https://{self.wrongRoot}"))
103 @responses.activate
104 def testGetFileURL(self):
106 s = f"https://{self.serverRoot}/{self.existingfolderName}/{self.existingfileName}"
107 buri = ButlerURI(f"https://{self.serverRoot}/{self.existingfolderName}/{self.existingfileName}")
108 loc = Location(f"https://{self.serverRoot}/", f"{self.existingfolderName}/{self.existingfileName}")
110 self.assertEqual(_getFileURL(s), s)
111 self.assertEqual(_getFileURL(buri), s)
112 self.assertEqual(_getFileURL(loc), s)
115if __name__ == "__main__": 115 ↛ 116line 115 didn't jump to line 116, because the condition on line 115 was never true
116 unittest.main()