func metadataExchange()

in internal/mock/alloydb.go [339:385]


func metadataExchange(conn net.Conn) error {
	msgSize := make([]byte, 4)
	n, err := conn.Read(msgSize)
	if err != nil {
		return err
	}
	if n != 4 {
		return fmt.Errorf("read %d bytes, want = 4", n)
	}

	size := binary.BigEndian.Uint32(msgSize)
	buf := make([]byte, size)
	n, err = conn.Read(buf)
	if err != nil {
		return err
	}
	if n != int(size) {
		return fmt.Errorf("read %d bytes, want = %d", n, size)
	}

	m := &connectorspb.MetadataExchangeRequest{}
	err = proto.Unmarshal(buf, m)
	if err != nil {
		return err
	}

	resp := &connectorspb.MetadataExchangeResponse{
		ResponseCode: connectorspb.MetadataExchangeResponse_OK,
	}
	data, err := proto.Marshal(resp)
	if err != nil {
		return err
	}
	respSize := proto.Size(resp)
	buf = make([]byte, 4)
	binary.BigEndian.PutUint32(buf, uint32(respSize))

	buf = append(buf, data...)
	n, err = conn.Write(buf)
	if err != nil {
		return err
	}
	if n != len(buf) {
		return fmt.Errorf("write %d bytes, want = %d", n, len(buf))
	}
	return nil
}