Example #1
0
    def test_direct_counter_entry_invalid(self):
        ce = sh.DirectCounterEntry("ExactOne_counter")
        with self.assertRaisesRegex(UserError, "table_entry must be an instance of TableEntry"):
            ce.table_entry = 0xbad
        with self.assertRaisesRegex(UserError, "This DirectCounterEntry is for table"):
            ce.table_entry = sh.TableEntry("TernaryOne")
        with self.assertRaisesRegex(UserError, "Direct counters are not index-based"):
            ce.index = 1

        te = sh.TableEntry("LpmOne")(action="actionA")
        with self.assertRaisesRegex(UserError, "Table has no direct counter"):
            te.counter_data.packet_count = 100

        te = sh.TableEntry("ExactOne")(action="actionA")
        with self.assertRaisesRegex(UserError, "Counter 'ExactOne_counter' is of type 'PACKETS"):
            te.counter_data.byte_count = 100
Example #2
0
    def test_direct_counter_entry(self):
        ce = sh.DirectCounterEntry("ExactOne_counter")
        ce.table_entry.match["header_test.field32"] = "10.0.0.0"
        ce.packet_count = 100
        expected_entry = """
table_entry {
  table_id: 33582705
  match {
    field_id: 1
    exact {
      value: "\\x0a\\x00\\x00\\x00"
    }
  }
}
data {
  packet_count: 100
}
"""
        expected_req = self.make_write_request(
            p4runtime_pb2.Update.MODIFY, P4RuntimeEntity.direct_counter_entry,
            expected_entry)
        ce.modify()
        self.servicer.Write.assert_called_with(ProtoCmp(expected_req), ANY)

        self.simple_read_check(expected_req.updates[0].entity, ce,
                               P4RuntimeEntity.direct_counter_entry)

        ce.table_entry = None
        expected_entry = """
table_entry {
  table_id: 33582705
}
data {
  packet_count: 100
}
"""
        expected_req = self.make_write_request(
            p4runtime_pb2.Update.MODIFY, P4RuntimeEntity.direct_counter_entry,
            expected_entry)
        ce.modify()
        self.servicer.Write.assert_called_with(ProtoCmp(expected_req), ANY)