h2spec

package module
v1.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 8, 2016 License: MIT Imports: 15 Imported by: 0

README

h2spec

h2spec is a conformance testing tool for HTTP/2 implementation.
This tool is compliant with RFC 7540 (HTTP/2).

Install

Go to the releases page, find the version you want, and download the zip file.

Build

  1. Make sure you have go 1.5 and set GOPATH appropriately
  2. Run go get github.com/summerwind/h2spec/cmd/h2spec

It is also possible to build specific version.

  1. Make sure you have go 1.5 and set GOPATH appropriately
  2. Run go get gopkg.in/summerwind/h2spec.v1/cmd/h2spec

Usage

$ h2spec --help
Usage: h2spec [OPTIONS]

Options:
  -p:        Target port. (Default: 80 or 443)
  -h:        Target host. (Default: 127.0.0.1)
  -t:        Connect over TLS. (Default: false)
  -k:        Don't verify server's certificate. (Default: false)
  -o:        Maximum time allowed for test. (Default: 2)
  -s:        Section number on which to run the test. (Example: -s 6.1 -s 6.2)
  -S:        Run the test cases marked as "strict".
  -j:        Creates report also in JUnit format into specified file.
  --version: Display version information and exit.
  --help:    Display this help and exit.

Screenshot

Sceenshot

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrCodeDefault http2.ErrCode = math.MaxUint8
View Source
var FlagDefault http2.Flags = math.MaxUint8
View Source
var LengthDefault uint32 = math.MaxUint32
View Source
var TIMEOUT = errors.New("Timeout")

Functions

func Run

func Run(ctx *Context) bool

func TestConnectionError added in v0.0.5

func TestConnectionError(ctx *Context, http2Conn *Http2Conn, codes []http2.ErrCode) (pass bool, expected []Result, actual Result)

func TestErrorCode added in v0.0.5

func TestErrorCode(code http2.ErrCode, expected []http2.ErrCode) bool

func TestStreamClose added in v0.0.8

func TestStreamClose(ctx *Context, http2Conn *Http2Conn) (pass bool, expected []Result, actual Result)

func TestStreamError added in v0.0.5

func TestStreamError(ctx *Context, http2Conn *Http2Conn, codes []http2.ErrCode) (pass bool, expected []Result, actual Result)

Types

type Context

type Context struct {
	Port      int
	Host      string
	Strict    bool
	Junit     string
	Tls       bool
	TlsConfig *tls.Config
	Sections  map[string]bool
	Timeout   time.Duration
	Verbose   bool
}

func (*Context) Authority

func (ctx *Context) Authority() string

func (*Context) GetRunMode added in v0.0.5

func (ctx *Context) GetRunMode(section string) RunMode

type Http2Conn

type Http2Conn struct {
	HpackEncoder   *hpack.Encoder
	HeaderWriteBuf bytes.Buffer
	Settings       map[http2.SettingID]uint32
	// contains filtered or unexported fields
}

func CreateHttp2Conn

func CreateHttp2Conn(ctx *Context, sn bool) *Http2Conn

func (*Http2Conn) EncodeHeader added in v0.0.4

func (h2Conn *Http2Conn) EncodeHeader(header []hpack.HeaderField) []byte

EncodeHeader encodes header and returns encoded bytes. h2Conn retains encoding context and next call of EncodeHeader will be performed using the same encoding context.

func (*Http2Conn) ReadFrame added in v0.0.3

func (h2Conn *Http2Conn) ReadFrame(t time.Duration) (http2.Frame, error)

ReadFrame reads a complete HTTP/2 frame from underlying connection. This function blocks until a complete frame is received or timeout t is expired. The returned http2.Frame must not be used after next ReadFrame call.

type Logger added in v1.2.0

type Logger struct {
	IndentLevel int
}

func (*Logger) Clear added in v1.2.0

func (log *Logger) Clear()

func (*Logger) LevelDown added in v1.2.0

func (log *Logger) LevelDown()

func (*Logger) LevelUp added in v1.2.0

func (log *Logger) LevelUp()

func (*Logger) ResetColor added in v1.2.0

func (Log *Logger) ResetColor()

func (*Logger) SetColor added in v1.2.0

func (Log *Logger) SetColor(color string)

func (*Logger) Write added in v1.2.0

func (log *Logger) Write(format string, a ...interface{})

func (*Logger) WriteBlank added in v1.2.0

func (log *Logger) WriteBlank()

type Result added in v0.0.5

type Result interface {
	String() string
}

type ResultConnectionClose added in v0.0.5

type ResultConnectionClose struct{}

func (*ResultConnectionClose) String added in v0.0.5

func (rcc *ResultConnectionClose) String() string

type ResultError added in v0.0.5

type ResultError struct {
	Error error
}

func (*ResultError) String added in v0.0.5

func (re *ResultError) String() string

type ResultFrame added in v0.0.5

type ResultFrame struct {
	Length  uint32
	Type    http2.FrameType
	Flags   http2.Flags
	ErrCode http2.ErrCode
}

func CreateResultFrame added in v1.1.0

func CreateResultFrame(f http2.Frame) (rf *ResultFrame)

func (*ResultFrame) String added in v0.0.5

func (rf *ResultFrame) String() string

type ResultSkipped added in v0.0.6

type ResultSkipped struct {
	Reason string
}

func (*ResultSkipped) String added in v0.0.6

func (rs *ResultSkipped) String() string

type ResultStreamClose added in v0.0.8

type ResultStreamClose struct{}

func (*ResultStreamClose) String added in v0.0.8

func (rsc *ResultStreamClose) String() string

type ResultTestTimeout added in v0.0.5

type ResultTestTimeout struct{}

func (*ResultTestTimeout) String added in v0.0.5

func (ttr *ResultTestTimeout) String() string

type RunMode added in v0.0.5

type RunMode int
const (
	ModeAll       RunMode = 0
	ModeGroupOnly RunMode = 1
	ModeSkip      RunMode = 2
)

type TcpConn

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

func CreateTcpConn

func CreateTcpConn(ctx *Context) *TcpConn

type Test added in v0.0.5

type Test interface {
	Run(*Context)
}

type TestCase added in v0.0.5

type TestCase struct {
	Desc string
	Spec string
	// contains filtered or unexported fields
}

func NewTestCase added in v0.0.5

func NewTestCase(desc, spec string, handler func(*Context) (bool, []Result, Result)) *TestCase

func (*TestCase) HandleFunc added in v0.0.5

func (tc *TestCase) HandleFunc(handler func(*Context) (bool, []Result, Result))

func (*TestCase) PrintEphemeralDesc added in v0.0.8

func (tc *TestCase) PrintEphemeralDesc()

func (*TestCase) PrintFail added in v1.1.0

func (tc *TestCase) PrintFail(expected []Result, actual Result)

func (*TestCase) PrintPass added in v1.1.0

func (tc *TestCase) PrintPass()

func (*TestCase) PrintSkipped added in v0.0.6

func (tc *TestCase) PrintSkipped(actual Result)

func (*TestCase) Run added in v0.0.5

func (tc *TestCase) Run(ctx *Context) TestResult

type TestGroup added in v0.0.5

type TestGroup struct {
	Section string
	Name    string
	// contains filtered or unexported fields
}

func ConnectionErrorHandlingTestGroup added in v0.0.5

func ConnectionErrorHandlingTestGroup(ctx *Context) *TestGroup

func ConnectionSpecificHeaderFieldsTestGroup added in v0.0.5

func ConnectionSpecificHeaderFieldsTestGroup(ctx *Context) *TestGroup

func ContinuationTestGroup added in v0.0.5

func ContinuationTestGroup(ctx *Context) *TestGroup

func DataTestGroup added in v0.0.5

func DataTestGroup(ctx *Context) *TestGroup

func DefinedSettingsParametersTestGroup added in v0.0.5

func DefinedSettingsParametersTestGroup(ctx *Context) *TestGroup

func ErrorHandlingTestGroup added in v0.0.5

func ErrorHandlingTestGroup(ctx *Context) *TestGroup

func ExtendingHttp2TestGroup added in v0.0.5

func ExtendingHttp2TestGroup(ctx *Context) *TestGroup

func FrameSizeTestGroup added in v0.0.5

func FrameSizeTestGroup(ctx *Context) *TestGroup

func GoawayTestGroup added in v0.0.5

func GoawayTestGroup(ctx *Context) *TestGroup

func HeaderCompressionAndDecompressionTestGroup added in v0.0.5

func HeaderCompressionAndDecompressionTestGroup(ctx *Context) *TestGroup

func HeadersTestGroup added in v0.0.5

func HeadersTestGroup(ctx *Context) *TestGroup

func Http2ConnectionPrefaceTestGroup added in v0.0.5

func Http2ConnectionPrefaceTestGroup(ctx *Context) *TestGroup

func HttpHeaderFieldsTestGroup added in v0.0.5

func HttpHeaderFieldsTestGroup(ctx *Context) *TestGroup

func HttpRequestResponseExchangeTestGroup added in v0.0.5

func HttpRequestResponseExchangeTestGroup(ctx *Context) *TestGroup

func InitialFlowControlWindowSizeTestGroup added in v0.0.5

func InitialFlowControlWindowSizeTestGroup(ctx *Context) *TestGroup

func MalformedRequestsAndResponsesTestGroup added in v0.0.5

func MalformedRequestsAndResponsesTestGroup(ctx *Context) *TestGroup

func NewTestGroup added in v0.0.5

func NewTestGroup(section, name string) *TestGroup

func PingTestGroup added in v0.0.5

func PingTestGroup(ctx *Context) *TestGroup

func PriorityTestGroup added in v0.0.5

func PriorityTestGroup(ctx *Context) *TestGroup

func PseudoHeaderFieldsTestGroup added in v0.0.5

func PseudoHeaderFieldsTestGroup(ctx *Context) *TestGroup

func RequestPseudoHeaderFieldsTestGroup added in v0.0.5

func RequestPseudoHeaderFieldsTestGroup(ctx *Context) *TestGroup

func RstStreamTestGroup added in v0.0.5

func RstStreamTestGroup(ctx *Context) *TestGroup

func ServerPushTestGroup added in v0.0.5

func ServerPushTestGroup(ctx *Context) *TestGroup

func SettingsTestGroup added in v0.0.5

func SettingsTestGroup(ctx *Context) *TestGroup

func StreamConcurrencyTestGroup added in v0.0.5

func StreamConcurrencyTestGroup(ctx *Context) *TestGroup

func StreamDependenciesTestGroup added in v1.0.1

func StreamDependenciesTestGroup(ctx *Context) *TestGroup

func StreamIdentifiersTestGroup added in v0.0.5

func StreamIdentifiersTestGroup(ctx *Context) *TestGroup

func StreamPriorityTestGroup added in v1.0.1

func StreamPriorityTestGroup(ctx *Context) *TestGroup

func StreamStatesTestGroup added in v0.0.5

func StreamStatesTestGroup(ctx *Context) *TestGroup

func TheFlowControlWindowTestGroup added in v0.0.5

func TheFlowControlWindowTestGroup(ctx *Context) *TestGroup

func WindowUpdateTestGroup added in v0.0.5

func WindowUpdateTestGroup(ctx *Context) *TestGroup

func (*TestGroup) AddTestCase added in v0.0.5

func (tg *TestGroup) AddTestCase(testCase *TestCase)

func (*TestGroup) AddTestGroup added in v0.0.5

func (tg *TestGroup) AddTestGroup(testGroup *TestGroup)

func (*TestGroup) CountFailed added in v1.0.0

func (tg *TestGroup) CountFailed() int

func (*TestGroup) CountSkipped added in v1.0.0

func (tg *TestGroup) CountSkipped() int

func (*TestGroup) CountTestCases added in v1.0.0

func (tg *TestGroup) CountTestCases() int

func (*TestGroup) PrintFailedTestCase added in v0.0.7

func (tg *TestGroup) PrintFailedTestCase(ctx *Context)

PrintFailedTestCase prints failed TestCase results under this TestGroup.

func (*TestGroup) PrintFooter added in v0.0.5

func (tg *TestGroup) PrintFooter()

func (*TestGroup) PrintHeader added in v0.0.5

func (tg *TestGroup) PrintHeader()

func (*TestGroup) Run added in v0.0.5

func (tg *TestGroup) Run(ctx *Context) bool

type TestResult added in v0.0.7

type TestResult int
const (
	Failed TestResult = iota
	Skipped
	Passed
)

TestResult indicates the result of test case

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL