quic-tracker: github.com/QUIC-Tracker/quic-tracker/scenarii Index | Files

package scenarii

import "github.com/QUIC-Tracker/quic-tracker/scenarii"

This package contains all the test scenarii that are part of the test suite. Each of them is executed in a separate connection. For executing scenarii, use the scripts in the bin/test_suite package.

When adding a new scenario, one should comply with the following requirements:

Its Name() must match its source code file without the extension.
It must be registered in the GetAllScenarii() function.
It must define an upper bound on its completion time. It should use the Timeout() function to achieve this.

Index

Package Files

ack_ecn.go ack_only.go address_validation.go connection_migration.go connection_migration_v4_v6.go flow_control.go handshake.go handshake_v6.go http3_encoder_stream.go http3_get.go http3_reserved_frames.go http3_reserved_streams.go http3_uni_streams_limits.go http_get_and_wait.go http_get_on_uni_stream.go key_update.go multi_stream.go new_connection_id.go padding.go retire_connection_id.go scenario.go server_flow_control.go spin_bit.go stop_sending_frame_on_receive_stream.go stream_opening_reordering.go transport_parameters.go unsupported_tls_version.go version_negotiation.go zero_rtt.go

Constants

const (
    AE_TLSHandshakeFailed = 1
    AE_FailedToSetECN     = 2
    AE_NonECN             = 3
    AE_NoACKECNReceived   = 4
    AE_NonECNButACKECN    = 5
)
const (
    AO_TLSHandshakeFailed   = 1
    AO_SentAOInResponseOfAO = 2
)
const (
    AV_TLSHandshakeFailed       = 1
    AV_SentMoreThan3Datagrams   = 2
    AV_SentMoreThan3TimesAmount = 3
    AV_HostTimedOut             = 3
)
const (
    CM_TLSHandshakeFailed        = 1
    CM_UDPConnectionFailed       = 2
    CM_HostDidNotMigrate         = 3
    CM_HostDidNotValidateNewPath = 4
)
const (
    CM46_TLSHandshakeFailed        = 1
    CM46_UDPConnectionFailed       = 2
    CM46_HostDidNotMigrate         = 3
    CM46_HostDidNotValidateNewPath = 4
    CM46_NoNewCIDReceived          = 5
    CM46_NoNewCIDUsed              = 6
)
const (
    FC_TLSHandshakeFailed          = 1
    FC_HostSentMoreThanLimit       = 2
    FC_HostDidNotResumeSending     = 3
    FC_NotEnoughDataAvailable      = 4
    FC_RespectedLimitsButNoBlocked = 5 // After discussing w/ the implementers, it is not reasonable to expect a STREAM_BLOCKED or a BLOCKED frame to be sent.

)
const (
    H_ReceivedUnexpectedPacketType = 1
    H_TLSHandshakeFailed           = 2
    H_NoCompatibleVersionAvailable = 3
    H_Timeout                      = 4
)
const (
    H3ES_TLSHandshakeFailed        = 1
    H3ES_RequestTimeout            = 2
    H3ES_NotEnoughStreamsAvailable = 3
    H3ES_SETTINGSNotSent           = 4
)
const (
    H3G_TLSHandshakeFailed        = 1
    H3G_RequestTimeout            = 2
    H3G_NotEnoughStreamsAvailable = 3
)
const (
    H3RF_TLSHandshakeFailed        = 1
    H3RF_RequestTimeout            = 2
    H3RF_NotEnoughStreamsAvailable = 3
)
const (
    H3RS_TLSHandshakeFailed        = 1
    H3RS_RequestTimeout            = 2
    H3RS_NotEnoughStreamsAvailable = 3
)
const (
    H3USFC_TLSHandshakeFailed        = 1
    H3USFC_RequestTimeout            = 2
    H3USFC_NotEnoughStreamsAvailable = 3
    H3USFC_StreamIDError             = 4
)
const (
    SGW_TLSHandshakeFailed              = 1
    SGW_EmptyStreamFrameNoFinBit        = 2
    SGW_RetransmittedAck                = 3 // This could affect performance, but we don't check it anymore
    SGW_WrongStreamIDReceived           = 4
    SGW_UnknownError                    = 5
    SGW_DidNotCloseTheConnection        = 6
    SGW_MultipleErrors                  = 7
    SGW_TooLowStreamIdBidiToSendRequest = 8
    SGW_DidntReceiveTheRequestedData    = 9
    SGW_AnsweredOnUnannouncedStream     = 10
)
const (
    GS2_TLSHandshakeFailed                    = 1
    GS2_TooLowStreamIdUniToSendRequest        = 2
    GS2_ReceivedDataOnStream2                 = 3
    GS2_ReceivedDataOnUnauthorizedStream      = 4
    GS2_AnswersToARequestOnAForbiddenStreamID = 5 // This is hard to disambiguate sometimes, we don't check anymore
    GS2_DidNotCloseTheConnection              = 6
)
const (
    KU_TLSHandshakeFailed = 1
    KU_HostDidNotRespond  = 2
)
const (
    MS_TLSHandshakeFailed      = 1
    MS_NoTPReceived            = 2 // We don't distinguish the two first cases anymore
    MS_NotAllStreamsWereClosed = 3
)
const (
    NCI_TLSHandshakeFailed       = 1
    NCI_HostDidNotProvideCID     = 2
    NCI_HostDidNotAnswerToNewCID = 3
    NCI_HostDidNotAdaptCID       = 4
    NCI_HostSentInvalidCIDLength = 5
)
const (
    P_VNDidNotComplete = 1
    P_ReceivedSmth     = 2
)
const (
    RCI_TLSHandshakeFailed       = 1
    RCI_HostDidNotProvideCID     = 2
    RCI_HostDidNotProvideNewCID  = 3
    RCI_HostSentInvalidCIDLength = 4
)
const (
    SFC_TLSHandshakeFailed = 1
    SFC_DidNotClose        = 2
)
const (
    SB_TLSHandshakeFailed = 1
    SB_DoesNotSpin        = 2
)
const (
    SSRS_TLSHandshakeFailed               = 1
    SSRS_DidNotCloseTheConnection         = 2
    SSRS_CloseTheConnectionWithWrongError = 3
    SSRS_MaxStreamUniTooLow               = 4
    SSRS_UnknownError                     = 5
)
const (
    SOR_TLSHandshakeFailed = 1
    SOR_HostDidNotRespond  = 2
)
const (
    TP_NoTPReceived            = 1
    TP_TPResentAfterVN         = 2 // All others error code are now handled by the handshake scenario
    TP_HandshakeDidNotComplete = 3
    TP_MissingParameters       = 4 // Since draft-15, there are no parameters that MUST be present
)
const (
    UTS_NoConnectionCloseSent        = 1
    UTS_WrongErrorCodeIsUsed         = 2 // See https://tools.ietf.org/html/draft-ietf-quic-tls-10#section-11
    UTS_VNDidNotComplete             = 3
    UTS_ReceivedUnexpectedPacketType = 4
)
const (
    VN_NotAnsweringToVN               = 1
    VN_DidNotEchoVersion              = 2 // draft-07 and below were stating that VN packets should echo the version of the client. It is not used anymore
    VN_LastTwoVersionsAreActuallySeal = 3 // draft-05 and below used AEAD to seal cleartext packets, VN packets should not be sealed, but some implementations did anyway.
    VN_Timeout                        = 4
    VN_UnusedFieldIsIdentical         = 5 // See https://github.com/quicwg/base-drafts/issues/963
)
const (
    ZR_TLSHandshakeFailed           = 1
    ZR_NoResumptionSecret           = 2
    ZR_ZeroRTTFailed                = 3
    ZR_DidntReceiveTheRequestedData = 4
)
const ForceVersionNegotiation = 0x1a2a3a4a

func GetAllScenarii Uses

func GetAllScenarii() map[string]Scenario

type AbstractScenario Uses

type AbstractScenario struct {
    // contains filtered or unexported fields
}

Each scenario should embed this structure

func (*AbstractScenario) CompleteHandshake Uses

func (s *AbstractScenario) CompleteHandshake(conn *qt.Connection, trace *qt.Trace, handshakeErrorCode uint8, additionalAgents ...agents.Agent) *agents.ConnectionAgents

Useful helper for scenarii that requires the handshake to complete before executing their test and don't want to discern the cause of its failure.

func (*AbstractScenario) Finished Uses

func (s *AbstractScenario) Finished()

func (*AbstractScenario) HTTP3 Uses

func (s *AbstractScenario) HTTP3() bool

func (*AbstractScenario) IPv6 Uses

func (s *AbstractScenario) IPv6() bool

func (*AbstractScenario) Name Uses

func (s *AbstractScenario) Name() string

func (*AbstractScenario) SetTimer Uses

func (s *AbstractScenario) SetTimer(d time.Duration)

func (*AbstractScenario) Timeout Uses

func (s *AbstractScenario) Timeout() <-chan time.Time

func (*AbstractScenario) Version Uses

func (s *AbstractScenario) Version() int

type AckECNScenario Uses

type AckECNScenario struct {
    AbstractScenario
}

func NewAckECNScenario Uses

func NewAckECNScenario() *AckECNScenario

func (*AckECNScenario) Run Uses

func (s *AckECNScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type AckOnlyScenario Uses

type AckOnlyScenario struct {
    AbstractScenario
}

func NewAckOnlyScenario Uses

func NewAckOnlyScenario() *AckOnlyScenario

func (*AckOnlyScenario) Run Uses

func (s *AckOnlyScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type AddressValidationScenario Uses

type AddressValidationScenario struct {
    AbstractScenario
}

func NewAddressValidationScenario Uses

func NewAddressValidationScenario() *AddressValidationScenario

func (*AddressValidationScenario) Run Uses

func (s *AddressValidationScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type ConnectionMigrationScenario Uses

type ConnectionMigrationScenario struct {
    AbstractScenario
}

func NewConnectionMigrationScenario Uses

func NewConnectionMigrationScenario() *ConnectionMigrationScenario

func (*ConnectionMigrationScenario) Run Uses

func (s *ConnectionMigrationScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type ConnectionMigrationv4v6Scenario Uses

type ConnectionMigrationv4v6Scenario struct {
    AbstractScenario
}

func NewConnectionMigrationv4v6Scenario Uses

func NewConnectionMigrationv4v6Scenario() *ConnectionMigrationv4v6Scenario

func (*ConnectionMigrationv4v6Scenario) Run Uses

func (s *ConnectionMigrationv4v6Scenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type FlowControlScenario Uses

type FlowControlScenario struct {
    AbstractScenario
}

func NewFlowControlScenario Uses

func NewFlowControlScenario() *FlowControlScenario

func (*FlowControlScenario) Run Uses

func (s *FlowControlScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type GetOnStream2Scenario Uses

type GetOnStream2Scenario struct {
    AbstractScenario
}

func NewGetOnStream2Scenario Uses

func NewGetOnStream2Scenario() *GetOnStream2Scenario

func (*GetOnStream2Scenario) Run Uses

func (s *GetOnStream2Scenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type HTTP3EncoderStreamScenario Uses

type HTTP3EncoderStreamScenario struct {
    AbstractScenario
}

func NewHTTP3EncoderStreamScenario Uses

func NewHTTP3EncoderStreamScenario() *HTTP3EncoderStreamScenario

func (*HTTP3EncoderStreamScenario) Run Uses

func (s *HTTP3EncoderStreamScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type HTTP3GETScenario Uses

type HTTP3GETScenario struct {
    AbstractScenario
}

func NewHTTP3GETScenario Uses

func NewHTTP3GETScenario() *HTTP3GETScenario

func (*HTTP3GETScenario) Run Uses

func (s *HTTP3GETScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type HTTP3ReservedFramesScenario Uses

type HTTP3ReservedFramesScenario struct {
    AbstractScenario
}

func NewHTTP3ReservedFramesScenario Uses

func NewHTTP3ReservedFramesScenario() *HTTP3ReservedFramesScenario

func (*HTTP3ReservedFramesScenario) Run Uses

func (s *HTTP3ReservedFramesScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type HTTP3ReservedStreamsScenario Uses

type HTTP3ReservedStreamsScenario struct {
    AbstractScenario
}

func NewHTTP3ReservedStreamsScenario Uses

func NewHTTP3ReservedStreamsScenario() *HTTP3ReservedStreamsScenario

func (*HTTP3ReservedStreamsScenario) Run Uses

func (s *HTTP3ReservedStreamsScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type HTTP3UniStreamsLimitsScenario Uses

type HTTP3UniStreamsLimitsScenario struct {
    AbstractScenario
}

func NewHTTP3UniStreamsLimitsScenario Uses

func NewHTTP3UniStreamsLimitsScenario() *HTTP3UniStreamsLimitsScenario

func (*HTTP3UniStreamsLimitsScenario) Run Uses

func (s *HTTP3UniStreamsLimitsScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type HandshakeScenario Uses

type HandshakeScenario struct {
    AbstractScenario
}

func NewHandshakeScenario Uses

func NewHandshakeScenario() *HandshakeScenario

func (*HandshakeScenario) Run Uses

func (s *HandshakeScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type Handshakev6Scenario Uses

type Handshakev6Scenario struct {
    AbstractScenario
}

func NewHandshakev6Scenario Uses

func NewHandshakev6Scenario() *Handshakev6Scenario

func (*Handshakev6Scenario) Run Uses

func (s *Handshakev6Scenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type KeyUpdateScenario Uses

type KeyUpdateScenario struct {
    AbstractScenario
}

func NewKeyUpdateScenario Uses

func NewKeyUpdateScenario() *KeyUpdateScenario

func (*KeyUpdateScenario) Run Uses

func (s *KeyUpdateScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type MultiStreamScenario Uses

type MultiStreamScenario struct {
    AbstractScenario
}

func NewMultiStreamScenario Uses

func NewMultiStreamScenario() *MultiStreamScenario

func (*MultiStreamScenario) Run Uses

func (s *MultiStreamScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type NewConnectionIDScenario Uses

type NewConnectionIDScenario struct {
    AbstractScenario
}

func NewNewConnectionIDScenario Uses

func NewNewConnectionIDScenario() *NewConnectionIDScenario

func (*NewConnectionIDScenario) Run Uses

func (s *NewConnectionIDScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type PaddingScenario Uses

type PaddingScenario struct {
    AbstractScenario
}

func NewPaddingScenario Uses

func NewPaddingScenario() *PaddingScenario

func (*PaddingScenario) Run Uses

func (s *PaddingScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type RetireConnectionIDScenario Uses

type RetireConnectionIDScenario struct {
    AbstractScenario
}

func NewRetireConnectionIDScenario Uses

func NewRetireConnectionIDScenario() *RetireConnectionIDScenario

func (*RetireConnectionIDScenario) Run Uses

func (s *RetireConnectionIDScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type Scenario Uses

type Scenario interface {
    Name() string
    Version() int
    IPv6() bool
    HTTP3() bool
    Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)
    SetTimer(d time.Duration)
    Timeout() <-chan time.Time
    Finished()
}

type ServerFlowControlScenario Uses

type ServerFlowControlScenario struct {
    AbstractScenario
}

func NewServerFlowControlScenario Uses

func NewServerFlowControlScenario() *ServerFlowControlScenario

func (*ServerFlowControlScenario) Run Uses

func (s *ServerFlowControlScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type SimpleGetAndWaitScenario Uses

type SimpleGetAndWaitScenario struct {
    AbstractScenario
}

func NewSimpleGetAndWaitScenario Uses

func NewSimpleGetAndWaitScenario() *SimpleGetAndWaitScenario

func (*SimpleGetAndWaitScenario) Run Uses

func (s *SimpleGetAndWaitScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type SpinBitScenario Uses

type SpinBitScenario struct {
    AbstractScenario
}

func NewSpinBitScenario Uses

func NewSpinBitScenario() *SpinBitScenario

func (*SpinBitScenario) Run Uses

func (s *SpinBitScenario) Run(conn *Connection, trace *Trace, preferredPath string, debug bool)

type StopSendingOnReceiveStreamScenario Uses

type StopSendingOnReceiveStreamScenario struct {
    AbstractScenario
}

func NewStopSendingOnReceiveStreamScenario Uses

func NewStopSendingOnReceiveStreamScenario() *StopSendingOnReceiveStreamScenario

func (*StopSendingOnReceiveStreamScenario) Run Uses

func (s *StopSendingOnReceiveStreamScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type StreamOpeningReorderingScenario Uses

type StreamOpeningReorderingScenario struct {
    AbstractScenario
}

func NewStreamOpeningReorderingScenario Uses

func NewStreamOpeningReorderingScenario() *StreamOpeningReorderingScenario

func (*StreamOpeningReorderingScenario) Run Uses

func (s *StreamOpeningReorderingScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type TransportParameterScenario Uses

type TransportParameterScenario struct {
    AbstractScenario
}

func NewTransportParameterScenario Uses

func NewTransportParameterScenario() *TransportParameterScenario

func (*TransportParameterScenario) Run Uses

func (s *TransportParameterScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type UnsupportedTLSVersionScenario Uses

type UnsupportedTLSVersionScenario struct {
    AbstractScenario
}

func NewUnsupportedTLSVersionScenario Uses

func NewUnsupportedTLSVersionScenario() *UnsupportedTLSVersionScenario

func (*UnsupportedTLSVersionScenario) Run Uses

func (s *UnsupportedTLSVersionScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type VersionNegotiationScenario Uses

type VersionNegotiationScenario struct {
    AbstractScenario
}

func NewVersionNegotiationScenario Uses

func NewVersionNegotiationScenario() *VersionNegotiationScenario

func (*VersionNegotiationScenario) Run Uses

func (s *VersionNegotiationScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

type ZeroRTTScenario Uses

type ZeroRTTScenario struct {
    AbstractScenario
}

func NewZeroRTTScenario Uses

func NewZeroRTTScenario() *ZeroRTTScenario

func (*ZeroRTTScenario) Run Uses

func (s *ZeroRTTScenario) Run(conn *qt.Connection, trace *qt.Trace, preferredPath string, debug bool)

Package scenarii imports 14 packages (graph). Updated 2019-04-25. Refresh now. Tools for package owners.