Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 04d73c04 authored by Hansong Zhang's avatar Hansong Zhang Committed by Myles Watson
Browse files

L2capTest ICS 2/27

Test: cert/run --host
Bug: 144770889
Change-Id: Ib1207d79448be85ddc2dffb2699e709f29ff5e06
parent 7f922fd6
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -66,8 +66,8 @@ class L2capMatchers(object):
        return lambda packet: L2capMatchers._is_matching_supervisory_frame(packet, req_seq, f, s, p)

    @staticmethod
    def IFrame(tx_seq=None, payload=None):
        return lambda packet: L2capMatchers._is_matching_information_frame(packet, tx_seq, payload)
    def IFrame(tx_seq=None, payload=None, f=None):
        return lambda packet: L2capMatchers._is_matching_information_frame(packet, tx_seq, payload, f)

    @staticmethod
    def Data(payload):
@@ -118,7 +118,7 @@ class L2capMatchers(object):
        return l2cap_packets.EnhancedSupervisoryFrameView(standard_frame)

    @staticmethod
    def _is_matching_information_frame(packet, tx_seq, payload):
    def _is_matching_information_frame(packet, tx_seq, payload, f):
        frame = L2capMatchers._information_frame(packet)
        if frame is None:
            return False
@@ -126,6 +126,8 @@ class L2capMatchers(object):
            return False
        if payload is not None and frame.GetPayload().GetBytes() != payload:
            return False
        if f is not None and frame.GetF() != f:
            return False
        return True

    @staticmethod
+51 −0
Original line number Diff line number Diff line
@@ -610,6 +610,57 @@ class L2capTest(GdFacadeOnlyBaseTestClass):
            L2capMatchers.IFrame(tx_seq=0, payload=b'abc'),
            L2capMatchers.IFrame(tx_seq=1, payload=b'abc')).inOrder()

    def test_respond_to_srej_p_set(self):
        """
        L2CAP/ERM/BV-14-C [Respond to S-Frame [SREJ] POLL Bit Set]
        """
        self._setup_link_from_cert()
        self.cert_l2cap.turn_on_ertm(tx_window_size=3, max_transmit=2)

        (dut_channel, cert_channel) = self._open_channel(
            scid=0x41, psm=0x33, use_ertm=True)

        for _ in range(4):
            dut_channel.send(b'abc')
        assertThat(cert_channel).emits(
            L2capMatchers.IFrame(tx_seq=0, payload=b'abc'),
            L2capMatchers.IFrame(tx_seq=1, payload=b'abc'),
            L2capMatchers.IFrame(tx_seq=2, payload=b'abc')).inOrder()

        cert_channel.send_s_frame(
            req_seq=1, p=Poll.POLL, s=SupervisoryFunction.SELECT_REJECT)

        assertThat(cert_channel).emits(
            L2capMatchers.IFrame(
                tx_seq=1, payload=b'abc', f=Final.POLL_RESPONSE),
            L2capMatchers.IFrame(tx_seq=3, payload=b'abc')).inOrder()

    def test_respond_to_srej_p_clear(self):
        """
        L2CAP/ERM/BV-15-C [Respond to S-Frame [SREJ] POLL Bit Clear]
        """
        self._setup_link_from_cert()
        self.cert_l2cap.turn_on_ertm(tx_window_size=3, max_transmit=2)

        (dut_channel, cert_channel) = self._open_channel(
            scid=0x41, psm=0x33, use_ertm=True)

        for _ in range(4):
            dut_channel.send(b'abc')
        assertThat(cert_channel).emits(
            L2capMatchers.IFrame(tx_seq=0, payload=b'abc'),
            L2capMatchers.IFrame(tx_seq=1, payload=b'abc'),
            L2capMatchers.IFrame(tx_seq=2, payload=b'abc')).inOrder()

        cert_channel.send_s_frame(
            req_seq=1, s=SupervisoryFunction.SELECT_REJECT)
        assertThat(cert_channel).emits(
            L2capMatchers.IFrame(tx_seq=1, payload=b'abc', f=Final.NOT_SET))
        cert_channel.send_s_frame(
            req_seq=3, s=SupervisoryFunction.RECEIVER_READY)
        assertThat(cert_channel).emits(
            L2capMatchers.IFrame(tx_seq=3, payload=b'abc', f=Final.NOT_SET))

    def test_receive_s_frame_rr_final_bit_set(self):
        """
        L2CAP/ERM/BV-18-C [Receive S-Frame [RR] Final Bit = 1]
+1 −0
Original line number Diff line number Diff line
@@ -411,6 +411,7 @@ struct ErtmController::impl {
        remote_busy_ = false;
        pass_to_tx(req_seq, f);
        retransmit_requested_i_frame(req_seq, p);
        send_pending_i_frames();
        if (p_bit_outstanding()) {
          srej_actioned_ = true;
          srej_save_req_seq_ = req_seq;