Skip to content

Commit f7720a7

Browse files
committed
added tests for opaque types
1 parent b3d52ce commit f7720a7

2 files changed

Lines changed: 109 additions & 0 deletions

File tree

tests/integ/attr_test.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1439,6 +1439,59 @@ def testPutPointsRegionReference(self):
14391439
self.assertEqual(rsp_value["select_type"], "H5S_SEL_POINTS")
14401440
self.assertEqual(rsp_value["selection"], [[0, 0], [2, 2], [4, 4]])
14411441

1442+
def testPutOpaqueAttribute(self):
1443+
print("testPutOpaqueAttribute", self.base_domain)
1444+
headers = helper.getRequestHeaders(domain=self.base_domain)
1445+
req = self.endpoint + "/"
1446+
1447+
rsp = self.session.get(req, headers=headers)
1448+
self.assertEqual(rsp.status_code, 200)
1449+
rspJson = json.loads(rsp.text)
1450+
root_id = rspJson["root"]
1451+
1452+
opaque_type = {"class": "H5T_OPAQUE", "size": 7}
1453+
1454+
# scalar opaque attribute
1455+
attr_name = "opaque_scalar"
1456+
value = base64.b64encode(b"OPAQUE0").decode("ascii")
1457+
data = {"type": opaque_type, "value": value}
1458+
req = self.endpoint + "/groups/" + root_id + "/attributes/" + attr_name
1459+
rsp = self.session.put(req, data=json.dumps(data), headers=headers)
1460+
self.assertEqual(rsp.status_code, 201)
1461+
1462+
rsp = self.session.get(req, headers=headers)
1463+
self.assertEqual(rsp.status_code, 200)
1464+
rspJson = json.loads(rsp.text)
1465+
self.assertTrue("type" in rspJson)
1466+
rsp_type = rspJson["type"]
1467+
self.assertEqual(rsp_type["class"], "H5T_OPAQUE")
1468+
self.assertEqual(rsp_type["size"], 7)
1469+
self.assertTrue("shape" in rspJson)
1470+
self.assertEqual(rspJson["shape"]["class"], "H5S_SCALAR")
1471+
self.assertTrue("value" in rspJson)
1472+
self.assertEqual(rspJson["value"], value)
1473+
1474+
# 1-D array of opaque values, including an empty (all-zero) element
1475+
attr_name = "opaque_array"
1476+
values = [
1477+
base64.b64encode(b"OPAQUE0").decode("ascii"),
1478+
base64.b64encode(b"OPAQUE1").decode("ascii"),
1479+
"",
1480+
]
1481+
data = {"type": opaque_type, "shape": 3, "value": values}
1482+
req = self.endpoint + "/groups/" + root_id + "/attributes/" + attr_name
1483+
rsp = self.session.put(req, data=json.dumps(data), headers=headers)
1484+
self.assertEqual(rsp.status_code, 201)
1485+
1486+
rsp = self.session.get(req, headers=headers)
1487+
self.assertEqual(rsp.status_code, 200)
1488+
rspJson = json.loads(rsp.text)
1489+
rsp_type = rspJson["type"]
1490+
self.assertEqual(rsp_type["class"], "H5T_OPAQUE")
1491+
self.assertEqual(rsp_type["size"], 7)
1492+
self.assertEqual(rspJson["shape"]["dims"], [3, ])
1493+
self.assertEqual(rspJson["value"], values)
1494+
14421495
def testPutNoData(self):
14431496
# Test PUT value for 1d attribute without any data provided
14441497
print("testPutNoData", self.base_domain)

tests/integ/value_test.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import unittest
1313
import json
1414
import numpy as np
15+
import base64
1516
import helper
1617
import config
1718
import time
@@ -2255,6 +2256,61 @@ def testPutValueRegionRefDataset(self):
22552256
)
22562257
self.assertEqual(rsp.status_code, 400)
22572258

2259+
def testPutOpaqueDataset(self):
2260+
# Test PUT/GET opaque dataset values
2261+
print("testPutOpaqueDataset", self.base_domain)
2262+
2263+
headers = helper.getRequestHeaders(domain=self.base_domain)
2264+
req = self.endpoint + "/"
2265+
2266+
rsp = self.session.get(req, headers=headers)
2267+
self.assertEqual(rsp.status_code, 200)
2268+
rspJson = json.loads(rsp.text)
2269+
root_uuid = rspJson["root"]
2270+
2271+
opaque_type = {"class": "H5T_OPAQUE", "size": 7}
2272+
data = {"type": opaque_type, "shape": 4}
2273+
req = self.endpoint + "/datasets"
2274+
rsp = self.session.post(req, data=json.dumps(data), headers=headers)
2275+
self.assertEqual(rsp.status_code, 201)
2276+
rspJson = json.loads(rsp.text)
2277+
dset_id = rspJson["id"]
2278+
self.assertTrue(helper.validateId(dset_id))
2279+
2280+
name = "opaque_dset"
2281+
req = self.endpoint + "/groups/" + root_uuid + "/links/" + name
2282+
payload = {"id": dset_id}
2283+
rsp = self.session.put(req, data=json.dumps(payload), headers=headers)
2284+
self.assertEqual(rsp.status_code, 201)
2285+
2286+
req = self.endpoint + "/datasets/" + dset_id + "/value"
2287+
2288+
# before any write, values should default to all-zero -> ""
2289+
rsp = self.session.get(req, headers=headers)
2290+
self.assertEqual(rsp.status_code, 200)
2291+
rspJson = json.loads(rsp.text)
2292+
self.assertTrue("hrefs" in rspJson)
2293+
self.assertTrue("value" in rspJson)
2294+
self.assertEqual(rspJson["value"], [""] * data["shape"])
2295+
2296+
# write opaque values, including an empty (all-zero) element
2297+
values = [
2298+
base64.b64encode(b"OPAQUE0").decode("ascii"),
2299+
base64.b64encode(b"OPAQUE1").decode("ascii"),
2300+
base64.b64encode(b"OPAQUE2").decode("ascii"),
2301+
"",
2302+
]
2303+
payload = {"value": values}
2304+
rsp = self.session.put(req, data=json.dumps(payload), headers=headers)
2305+
self.assertEqual(rsp.status_code, 200)
2306+
2307+
rsp = self.session.get(req, headers=headers)
2308+
self.assertEqual(rsp.status_code, 200)
2309+
rspJson = json.loads(rsp.text)
2310+
self.assertTrue("hrefs" in rspJson)
2311+
self.assertTrue("value" in rspJson)
2312+
self.assertEqual(rspJson["value"], values)
2313+
22582314
def testGet(self):
22592315
domain = helper.getTestDomain("tall.h5")
22602316
print("testGet", domain)

0 commit comments

Comments
 (0)