aio/unit/_metadata_test.py
Go to the documentation of this file.
1 # Copyright 2020 gRPC authors.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 """Tests for the metadata abstraction that's used in the asynchronous driver."""
15 import logging
16 import unittest
17 
18 from grpc.experimental.aio import Metadata
19 
20 
21 class TestTypeMetadata(unittest.TestCase):
22  """Tests for the metadata type"""
23 
24  _DEFAULT_DATA = (("key1", "value1"), ("key2", "value2"))
25  _MULTI_ENTRY_DATA = (("key1", "value1"), ("key1", "other value 1"),
26  ("key2", "value2"))
27 
28  def test_init_metadata(self):
29  test_cases = {
30  "emtpy": (),
31  "with-single-data": self._DEFAULT_DATA,
32  "with-multi-data": self._MULTI_ENTRY_DATA,
33  }
34  for case, args in test_cases.items():
35  with self.subTest(case=case):
36  metadata = Metadata(*args)
37  self.assertEqual(len(metadata), len(args))
38 
39  def test_get_item(self):
40  metadata = Metadata(("key", "value1"), ("key", "value2"),
41  ("key2", "other value"))
42  self.assertEqual(metadata["key"], "value1")
43  self.assertEqual(metadata["key2"], "other value")
44  self.assertEqual(metadata.get("key"), "value1")
45  self.assertEqual(metadata.get("key2"), "other value")
46 
47  with self.assertRaises(KeyError):
48  metadata["key not found"]
49  self.assertIsNone(metadata.get("key not found"))
50 
51  def test_add_value(self):
52  metadata = Metadata()
53  metadata.add("key", "value")
54  metadata.add("key", "second value")
55  metadata.add("key2", "value2")
56 
57  self.assertEqual(metadata["key"], "value")
58  self.assertEqual(metadata["key2"], "value2")
59 
60  def test_get_all_items(self):
61  metadata = Metadata(*self._MULTI_ENTRY_DATA)
62  self.assertEqual(metadata.get_all("key1"), ["value1", "other value 1"])
63  self.assertEqual(metadata.get_all("key2"), ["value2"])
64  self.assertEqual(metadata.get_all("non existing key"), [])
65 
66  def test_container(self):
67  metadata = Metadata(*self._MULTI_ENTRY_DATA)
68  self.assertIn("key1", metadata)
69 
70  def test_equals(self):
71  metadata = Metadata()
72  for key, value in self._DEFAULT_DATA:
73  metadata.add(key, value)
74  metadata2 = Metadata(*self._DEFAULT_DATA)
75 
76  self.assertEqual(metadata, metadata2)
77  self.assertNotEqual(metadata, "foo")
78 
79  def test_repr(self):
80  metadata = Metadata(*self._DEFAULT_DATA)
81  expected = "Metadata({0!r})".format(self._DEFAULT_DATA)
82  self.assertEqual(repr(metadata), expected)
83 
84  def test_set(self):
85  metadata = Metadata(*self._MULTI_ENTRY_DATA)
86  override_value = "override value"
87  for _ in range(3):
88  metadata["key1"] = override_value
89 
90  self.assertEqual(metadata["key1"], override_value)
91  self.assertEqual(metadata.get_all("key1"),
92  [override_value, "other value 1"])
93 
94  empty_metadata = Metadata()
95  for _ in range(3):
96  empty_metadata["key"] = override_value
97 
98  self.assertEqual(empty_metadata["key"], override_value)
99  self.assertEqual(empty_metadata.get_all("key"), [override_value])
100 
101  def test_set_all(self):
102  metadata = Metadata(*self._DEFAULT_DATA)
103  metadata.set_all("key", ["value1", b"new value 2"])
104 
105  self.assertEqual(metadata["key"], "value1")
106  self.assertEqual(metadata.get_all("key"), ["value1", b"new value 2"])
107 
109  metadata = Metadata(*self._MULTI_ENTRY_DATA)
110  del metadata["key1"]
111  self.assertEqual(metadata.get("key1"), "other value 1")
112 
113  metadata.delete_all("key1")
114  self.assertNotIn("key1", metadata)
115 
116  metadata.delete_all("key2")
117  self.assertEqual(len(metadata), 0)
118 
119  with self.assertRaises(KeyError):
120  del metadata["other key"]
121 
123  scenarios = (
124  (None, Metadata()),
125  (Metadata(), Metadata()),
126  (self._DEFAULT_DATA, Metadata(*self._DEFAULT_DATA)),
128  (Metadata(*self._DEFAULT_DATA), Metadata(*self._DEFAULT_DATA)),
129  )
130  for source, expected in scenarios:
131  with self.subTest(raw_metadata=source, expected=expected):
132  self.assertEqual(expected, Metadata.from_tuple(source))
133 
134 
135 if __name__ == '__main__':
136  logging.basicConfig()
137  unittest.main(verbosity=2)
http2_test_server.format
format
Definition: http2_test_server.py:118
tests_aio.unit._metadata_test.TestTypeMetadata.test_metadata_from_tuple
def test_metadata_from_tuple(self)
Definition: aio/unit/_metadata_test.py:122
capstone.range
range
Definition: third_party/bloaty/third_party/capstone/bindings/python/capstone/__init__.py:6
tests_aio.unit._metadata_test.TestTypeMetadata.test_init_metadata
def test_init_metadata(self)
Definition: aio/unit/_metadata_test.py:28
tests_aio.unit._metadata_test.TestTypeMetadata
Definition: aio/unit/_metadata_test.py:21
tests_aio.unit._metadata_test.TestTypeMetadata._DEFAULT_DATA
tuple _DEFAULT_DATA
Definition: aio/unit/_metadata_test.py:24
tests_aio.unit._metadata_test.TestTypeMetadata.test_set
def test_set(self)
Definition: aio/unit/_metadata_test.py:84
tests_aio.unit._metadata_test.TestTypeMetadata.test_get_item
def test_get_item(self)
Definition: aio/unit/_metadata_test.py:39
tests_aio.unit._metadata_test.TestTypeMetadata.test_set_all
def test_set_all(self)
Definition: aio/unit/_metadata_test.py:101
tests_aio.unit._metadata_test.TestTypeMetadata.test_equals
def test_equals(self)
Definition: aio/unit/_metadata_test.py:70
tests_aio.unit._metadata_test.TestTypeMetadata.test_container
def test_container(self)
Definition: aio/unit/_metadata_test.py:66
tests_aio.unit._metadata_test.TestTypeMetadata._MULTI_ENTRY_DATA
tuple _MULTI_ENTRY_DATA
Definition: aio/unit/_metadata_test.py:25
tests_aio.unit._metadata_test.TestTypeMetadata.test_delete_values
def test_delete_values(self)
Definition: aio/unit/_metadata_test.py:108
grpc::experimental.aio
Definition: src/python/grpcio/grpc/experimental/aio/__init__.py:1
grpc.aio._metadata.Metadata
Definition: src/python/grpcio/grpc/aio/_metadata.py:23
tests_aio.unit._metadata_test.TestTypeMetadata.test_get_all_items
def test_get_all_items(self)
Definition: aio/unit/_metadata_test.py:60
tests_aio.unit._metadata_test.TestTypeMetadata.test_repr
def test_repr(self)
Definition: aio/unit/_metadata_test.py:79
tests_aio.unit._metadata_test.TestTypeMetadata.test_add_value
def test_add_value(self)
Definition: aio/unit/_metadata_test.py:51
len
int len
Definition: abseil-cpp/absl/base/internal/low_level_alloc_test.cc:46


grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:38