def test_clear_properties(self): # Add a new property node = Node(ElementTree.fromstring(NODE_XML)) node.set_property('quota', '1000') properties = node.node.find(Node.PROPERTIES) property_list = properties.findall(Node.PROPERTY) self.assertTrue(len(property_list) >= 1) # Clear the property node.clear_properties() properties = node.node.find(Node.PROPERTIES) property_list = properties.findall(Node.PROPERTY) self.assertTrue(len(property_list) == 0)
def test_node_eq(self): # None node raises LoookupError with self.assertRaises(LookupError): Node(None) # Node equality node1 = Node(ElementTree.Element(Node.NODE)) node2 = Node(ElementTree.Element(Node.NODE)) self.assertNotEqual(node1, 'foo') self.assertEquals(node1, node2) node1.props = {'foo': 'bar'} self.assertNotEqual(node1, node2) node2.props = {'foo': 'bar'} self.assertEquals(node1, node2)
def test_update(self): node = Node(ElementTree.fromstring(NODE_XML)) resp = Mock() resp.headers.get = Mock(return_value="https://www.canfar.phys.uvic.ca/vospace") client = Client() client.get_node_url = Mock(return_value='https://www.canfar.phys.uvic.ca/vospace') client.conn = Mock() client.conn.session.post = Mock(return_value=resp) client.get_transfer_error = Mock() client.protocol = 'https' data = str(node) property_url = 'https://www.canfar.phys.uvic.ca/vospace/nodeprops' result = client.update(node, False) self.assertEqual(result, 0) client.conn.session.post.assert_called_with('https://www.canfar.phys.uvic.ca/vospace', data=data, allow_redirects=False) call1 = call(property_url, allow_redirects=False, data=data, headers={'Content-type': 'text/xml'}) call2 = call('https://www.canfar.phys.uvic.ca/vospace/phase', allow_redirects=False, data="PHASE=RUN", headers={'Content-type': "text/text"}) calls = [call1, call2] client.conn = Mock() client.conn.session.post = Mock(return_value=resp) with patch('vos.vos.EndPoints.properties', property_url): result = client.update(node, True) self.assertEqual(result, 0) client.conn.session.post.assert_has_calls(calls)
def test_change_prop(self): # Add a new property node = Node(ElementTree.fromstring(NODE_XML)) quota = TestNode.get_node_property(node, 'quota') self.assertIsNone(quota) node.change_prop('quota', '1000') quota = TestNode.get_node_property(node, 'quota') self.assertIsNotNone(quota) self.assertEqual('1000', quota.text) # Change a current property node.change_prop('quota', '2000') quota = TestNode.get_node_property(node, 'quota') self.assertIsNotNone(quota) self.assertEqual('2000', quota.text)
def test_node_set_property(self): node = Node(ElementTree.fromstring(NODE_XML)) properties = node.node.find(Node.PROPERTIES) property_list = properties.findall(Node.PROPERTY) self.assertEqual(len(property_list), 1) node.set_property('key', 'value') properties = node.node.find(Node.PROPERTIES) property_list = properties.findall(Node.PROPERTY) self.assertEqual(len(property_list), 2) found = False for prop in property_list: uri = prop.get('uri') if uri.endswith('key'): found = True self.assertTrue(found)
def test_add_props(self): old_node = Node(ElementTree.fromstring(NODE_XML)) new_node = Node(ElementTree.fromstring(NODE_XML)) new_node.props['quota'] = '1000' new_node.create = Mock(return_value=new_node.node) data = str(new_node) headers = {'size': str(len(data))} client = Client() client.get_node = Mock(return_value=old_node) client.get_node_url = Mock(return_value='http://foo.com/bar') client.conn = Mock() with patch('vos.Client', client) as mock: mock.add_props(new_node) mock.conn.session.post.assert_called_with('http://foo.com/bar', headers=headers, data=data)
def test_create(self): uri = 'vos://create.vospace.auth!vospace/bar' client = Client() node = Node(client.fix_uri(uri)) node2 = Node(str(node)) self.assertEqual(node, node2) data = str(node) headers = {'size': str(len(data))} client = Client() # client.get_node_url = Mock(return_value='http://foo.com/bar') session_mock = MagicMock() client.get_session = Mock(return_value=session_mock) session_mock.put.return_value = Mock(content=str(node)) result = client.create(uri) self.assertEqual(node, result) session_mock.put.assert_called_with( 'http://www.canfar.phys.uvic.ca/vospace/nodes/bar', headers=headers, data=data)
def get_node_property(node, key): properties = node.node.find(Node.PROPERTIES) if properties is None: return None property_list = properties.findall(Node.PROPERTY) if len(property_list) == 0: return None for prop in property_list: name = Node.get_prop_name(prop.get('uri')) if name == key: return prop return None
def test_node_eq(self): # None node raises LoookupError with self.assertRaises(LookupError): node = Node(None) # Node equality node1 = Node(ElementTree.Element(Node.NODE)) node2 = Node(ElementTree.Element(Node.NODE)) self.assertNotEqual(node1, 'foo') self.assertEquals(node1, node2) node1.props = {'foo': 'bar'} self.assertNotEqual(node1, node2) node2.props = {'foo': 'bar'} self.assertEquals(node1, node2)
def test_update(self): node = Node(ElementTree.fromstring(NODE_XML)) resp = Mock() resp.headers.get = Mock( return_value="https://www.canfar.phys.uvic.ca/vospace") conn = Mock(spec=vos.Connection) conn.session.post = Mock(return_value=resp) client = Client(conn=conn) client.get_node_url = Mock( return_value='https://www.canfar.phys.uvic.ca/vospace') client.get_transfer_error = Mock() client.protocol = 'https' data = str(node) property_url = 'https://www.canfar.phys.uvic.ca/vospace/nodeprops' endpoints_mock = Mock() endpoints_mock.properties = property_url client.get_endpoints = Mock(return_value=endpoints_mock) result = client.update(node, False) self.assertEqual(result, 0) client.conn.session.post.assert_called_with( 'https://www.canfar.phys.uvic.ca/vospace', data=data, allow_redirects=False) call1 = call(property_url, allow_redirects=False, data=data, headers={'Content-type': 'text/xml'}) call2 = call( 'https://www.canfar.phys.uvic.ca/vospace/phase', allow_redirects=False, data="PHASE=RUN", headers={'Content-type': 'application/x-www-form-urlencoded'}) calls = [call1, call2] client.conn = Mock(spec=vos.Connection) client.conn.session.post = Mock(return_value=resp) result = client.update(node, True) self.assertEqual(result, 0) client.conn.session.post.assert_has_calls(calls)
def test_add_props(self): old_node = Node(ElementTree.fromstring(NODE_XML)) old_node.uri = 'vos:sometest' new_node = Node(ElementTree.fromstring(NODE_XML)) new_node.props['quota'] = '1000' new_node.create = Mock(return_value=new_node.node) data = str(new_node) headers = {'size': str(len(data))} client = Client() client.get_node = Mock(return_value=old_node) client.get_node_url = Mock(return_value='http://foo.com/bar') mock_session = Mock() client.get_session = Mock(return_value=mock_session) client.add_props(new_node) client.get_session.assert_called_with('vos://foo.com!vospace/bar') mock_session.post.assert_called_with('http://foo.com/bar', headers=headers, data=data)
def test_chrgrp(self): node = Node(ElementTree.fromstring(NODE_XML)) self.assertEquals('', node.groupread) node.chrgrp('foo') self.assertEquals('foo', node.groupread)
def test_chwgrp(self): node = Node(ElementTree.fromstring(NODE_XML)) self.assertEqual('', node.groupwrite) node.chwgrp('foo') self.assertEqual('foo', node.groupwrite)