def test_from_thrift(self): # Valid IPv6 self.assertEqual( SocketAddress( address_family=SocketAddressFamily.INET, address=IPv6Address(self.ip6_addr), port=self.port, ), SocketAddress.from_thrift( ThriftSocketAddress( address_family=SocketAddressFamily.INET, address=IPv6Address(self.ip6_addr).compressed, port=self.port, )), ) # Valid IPv4 self.assertEqual( SocketAddress( address_family=SocketAddressFamily.INET, address=IPv4Address(self.ip4_addr), port=self.port, ), SocketAddress.from_thrift( ThriftSocketAddress( address_family=SocketAddressFamily.INET, address=IPv4Address(self.ip4_addr).compressed, port=self.port, )), ) # Valid UNIX self.assertEqual( SocketAddress(address_family=SocketAddressFamily.UNIX, path=self.unix_path), SocketAddress.from_thrift( ThriftSocketAddress(address_family=SocketAddressFamily.UNIX, address=self.unix_path)), ) # Invalid Thrift struct with self.assertRaises(AddressValueError): SocketAddress.from_thrift( ThriftSocketAddress( address_family=SocketAddressFamily.INET, address="invalid ip-address", port=self.port, ))
def from_thrift(cls, node_id: NodeID) -> "Node": """ Parses Thrift-representation of NodeID and returns instance """ return cls( node_index=node_id.node_index, data_addr=SocketAddress.from_thrift(node_id.address) if node_id.address else None, name=node_id.name, )
def from_thrift(cls, node_id: NodeID) -> "Node": """ Parses Thrift-representation of NodeID and returns instance """ return cls( node_index=node_id.node_index, # pyre-fixme[6]: Expected `SocketAddress` for 1st param but got # `Optional[SocketAddress]`. data_addr=SocketAddress.from_thrift(node_id.address) if node_id.address else None, name=node_id.name, )
def test_no_name(self): addr = gen_SocketAddress() self.assertEqual( NodeView( node_config=NodeConfig( node_index=0, data_address=addr, roles=set(), location_per_scope={}, name="", ), node_state=NodeState(node_index=0), maintenances=[], ).node_name, str(SocketAddress.from_thrift(addr)), )
def data_address(self) -> SocketAddress: return SocketAddress.from_thrift(self.node_config.data_address)
def _validate( self, nv: NodeView, nc: NodeConfig, ns: NodeState, mnts: Tuple[MaintenanceDefinition, ...], ): self.assertEqual(nv.node_config, nc) self.assertEqual(nv.node_state, ns) self.assertEqual(nv.maintenances, mnts) self.assertEqual(nv.node_index, nc.node_index) if nc.name: self.assertEqual(nv.node_name, nc.name) else: self.assertEqual( nv.node_name, str(SocketAddress.from_thrift(nc.data_address)) ) self.assertEqual(nv.data_address, SocketAddress.from_thrift(nc.data_address)) if nv.thrift_address.address_family == SocketAddressFamily.INET: assert nv.thrift_address.address is not None from_nc = SocketAddress.from_thrift(nc.data_address) assert from_nc.address is not None self.assertEqual(nv.thrift_address.port, 6440) self.assertEqual( nv.thrift_address.address.compressed, from_nc.address.compressed ) self.assertEqual( nv.node_id, NodeID(node_index=nc.node_index, address=nc.data_address, name=nc.name), ) self.assertEqual(nv.location, nc.location) self.assertEqual(nv.location_per_scope, nc.location_per_scope) self.assertEqual(nv.roles, nc.roles) for r in Role: self.assertEqual(nv.has_role(r), r in nc.roles) self.assertEqual(nv.is_sequencer, Role.SEQUENCER in nc.roles) self.assertEqual(nv.is_storage, Role.STORAGE in nc.roles) self.assertEqual(nv.daemon_state, ns.daemon_state) if Role.SEQUENCER in nc.roles: assert nc.sequencer is not None self.assertEqual(nv.sequencer_config, nc.sequencer) self.assertEqual(nv.sequencer_weight, nc.sequencer.weight) assert ns.sequencer_state is not None self.assertEqual(nv.sequencer_state, ns.sequencer_state) self.assertEqual(nv.sequencing_state, ns.sequencer_state.state) else: self.assertIsNone(nv.sequencer_config) self.assertIsNone(nv.sequencer_state) self.assertIsNone(nv.sequencer_weight) self.assertIsNone(nv.sequencing_state) if Role.STORAGE in nc.roles: assert nc.storage is not None assert ns.shard_states is not None self.assertEqual(nv.storage_config, nc.storage) self.assertEqual(nv.storage_weight, nc.storage.weight) self.assertEqual(nv.num_shards, nc.storage.num_shards) self.assertEqual(nv.shard_states, ns.shard_states) self.assertListEqual( nv.shards_data_health, [s.data_health for s in ns.shard_states] ) self.assertEqual( nv.shards_data_health_count, Counter(s.data_health for s in ns.shard_states), ) self.assertListEqual( nv.shards_current_storage_state, [s.current_storage_state for s in ns.shard_states], ) self.assertEqual( nv.shards_current_storage_state_count, Counter(s.current_storage_state for s in ns.shard_states), ) self.assertListEqual( nv.shards_current_operational_state, [s.current_operational_state for s in ns.shard_states], ) self.assertEqual( nv.shards_current_operational_state_count, Counter(s.current_operational_state for s in ns.shard_states), ) self.assertListEqual( nv.shards_membership_storage_state, [s.storage_state for s in ns.shard_states], ) self.assertEqual( nv.shards_membership_storage_state_count, Counter(s.storage_state for s in ns.shard_states), ) self.assertListEqual( nv.shards_metadata_state, [s.metadata_state for s in ns.shard_states] ) self.assertEqual( nv.shards_metadata_state_count, Counter(s.metadata_state for s in ns.shard_states), ) else: self.assertIsNone(nv.storage_config) self.assertIsNone(nv.storage_weight) self.assertIsNone(nv.num_shards) self.assertEqual(nv.shard_states, [])
def _get_node_by_node_config(nc: NodeConfig) -> Node: return Node( node_index=nc.node_index, data_addr=SocketAddress.from_thrift(nc.data_address), name=nc.name, )
def data_address(self) -> SocketAddress: return SocketAddress.from_thrift(self.nc.data_address)