def METHOD_NAME(self):
    node_1 = ("a" * 32, {"foo": "a"})
    node_2 = ("b" * 32, {"foo": "b"})
    node_3 = ("c" * 32, {"foo": "c"})
    for node_id, data in [node_1, node_2, node_3]:
        Node.objects.create(id=node_id, data=compress(json_dumps(data).encode("utf8")))
    # Get / get multi populates cache
    assert self.ns.get(node_1[0]) == node_1[1]
    assert self.ns.get_multi([node_2[0], node_3[0]]) == {
        node_2[0]: node_2[1],
        node_3[0]: node_3[1],
    }
    with mock.patch.object(Node.objects, "get") as mock_get:
        assert self.ns.get(node_1[0]) == node_1[1]
        assert self.ns.get(node_2[0]) == node_2[1]
        assert self.ns.get(node_3[0]) == node_3[1]
        assert mock_get.call_count == 0
    with mock.patch.object(Node.objects, "filter") as mock_filter:
        assert self.ns.get_multi([node_1[0], node_2[0], node_3[0]])
        assert mock_filter.call_count == 0
    # Manually deleted item should still retrievable from cache
    Node.objects.get(id=node_1[0]).delete()
    assert self.ns.get(node_1[0]) == node_1[1]
    assert self.ns.get_multi([node_1[0], node_2[0]]) == {
        node_1[0]: node_1[1],
        node_2[0]: node_2[1],
    }
    # Deletion clars cache
    self.ns.delete(node_1[0])
    assert self.ns.get_multi([node_1[0], node_2[0]]) == {node_2[0]: node_2[1]}
    self.ns.delete_multi([node_1[0], node_2[0]])
    assert self.ns.get_multi([node_1[0], node_2[0]]) == {}
    # Setting the item updates cache
    new_value = {"event_id": "d" * 32}
    self.ns.set(node_1[0], new_value)
    with mock.patch.object(Node.objects, "get") as mock_get:
        assert self.ns.get(node_1[0]) == new_value
        assert mock_get.call_count == 0
    # Missing rows are never cached
    assert self.ns.get("node_4") is None
    with mock.patch.object(Node.objects, "get") as mock_get:
        mock_get.side_effect = Node.DoesNotExist
        self.ns.get("node_4")
        self.ns.get("node_4")
        assert mock_get.call_count == 2