Documentation
¶
Index ¶
- Constants
- Variables
- func ReadDictionary(dictionaryLocation string) []string
- type MockGenerationBudgetError
- type MockGenerationOptions
- type MockGenerator
- func (mg *MockGenerator) DisableRequiredCheck()
- func (mg *MockGenerator) GenerateMock(mock any, name string) ([]byte, error)
- func (mg *MockGenerator) RenderXML(value any, schema *highbase.Schema) []byte
- func (mg *MockGenerator) SetMockGenerationOptions(options MockGenerationOptions)
- func (mg *MockGenerator) SetPretty()
- func (mg *MockGenerator) SetSeed(seed int64)
- func (mg *MockGenerator) SetUnresolvedRefHandler(handler UnresolvedRefHandler)
- type MockType
- type SchemaRenderer
- func (wr *SchemaRenderer) DisableRequiredCheck()
- func (wr *SchemaRenderer) DiveIntoSchema(schema *base.Schema, key string, structure map[string]any, ...) bool
- func (wr *SchemaRenderer) PseudoUUID() string
- func (wr *SchemaRenderer) RandomFloat64() float64
- func (wr *SchemaRenderer) RandomInt(min, max int64) int64
- func (wr *SchemaRenderer) RandomWord(min, max int64, depth int) string
- func (wr *SchemaRenderer) RenderSchema(schema *base.Schema) any
- func (wr *SchemaRenderer) RenderSchemaWithError(schema *base.Schema) (any, error)
- func (wr *SchemaRenderer) SetMockGenerationOptions(options MockGenerationOptions)
- func (wr *SchemaRenderer) SetSeed(seed int64)
- func (wr *SchemaRenderer) SetUnresolvedRefHandler(handler UnresolvedRefHandler)
- type UnresolvedRefHandler
Examples ¶
Constants ¶
const ( // Example is the field name used for a single mock example value. Example = "Example" // Examples is the field name used for named mock examples. Examples = "Examples" // Schema is the field name used for schema-based mock generation. Schema = "Schema" )
const ( // DefaultMaxPatternRepeatBudget is the default regex repeat budget used when generating string mocks from patterns. DefaultMaxPatternRepeatBudget = 32 // DefaultMaxGeneratedStringBytes is the default byte ceiling for each generated string mock value. DefaultMaxGeneratedStringBytes = 4096 // DefaultMaxMockDepth is the default maximum recursive schema depth for generated mocks. DefaultMaxMockDepth = 100 // DefaultMaxMockNodes is the default maximum number of schema nodes visited for a generated mock. DefaultMaxMockNodes = 10000 // DefaultMaxMockProperties is the default maximum number of object properties rendered for a generated mock. DefaultMaxMockProperties = 5000 // DefaultMaxMockRefExpansions is the default maximum number of reference expansions for a generated mock. DefaultMaxMockRefExpansions = 2000 // DefaultMaxMockBytes is the default approximate generated mock byte budget before serialization. DefaultMaxMockBytes = 1024 * 1024 )
Variables ¶
var ErrMockGenerationBudgetExceeded = errors.New("mock generation budget exceeded")
ErrMockGenerationBudgetExceeded is wrapped by errors caused by configured mock generation budgets.
Functions ¶
func ReadDictionary ¶
ReadDictionary reads a dictionary file and returns one entry per line.
Types ¶
type MockGenerationBudgetError ¶ added in v0.36.5
type MockGenerationBudgetError struct {
// Budget is the name of the budget that was exceeded.
Budget string
// Limit is the configured budget value.
Limit int
// Actual is the observed value that exceeded the limit.
Actual int
}
MockGenerationBudgetError describes which mock generation budget was exceeded.
func (*MockGenerationBudgetError) Error ¶ added in v0.36.5
func (e *MockGenerationBudgetError) Error() string
func (*MockGenerationBudgetError) Unwrap ¶ added in v0.36.5
func (e *MockGenerationBudgetError) Unwrap() error
Unwrap returns ErrMockGenerationBudgetExceeded for errors.Is checks.
type MockGenerationOptions ¶ added in v0.36.5
type MockGenerationOptions struct {
// MaxPatternRepeatBudget limits the repeat budget passed to regex-based string generation.
MaxPatternRepeatBudget int
// MaxGeneratedStringBytes limits the final size of generated string values.
MaxGeneratedStringBytes int
// MaxMockDepth limits recursive schema depth while building mock structures.
MaxMockDepth int
// MaxMockNodes limits the number of schema nodes visited while building a mock.
MaxMockNodes int
// MaxMockProperties limits the number of object properties rendered while building a mock.
MaxMockProperties int
// MaxMockRefExpansions limits the number of $ref schema expansions while building a mock.
MaxMockRefExpansions int
// MaxMockBytes limits approximate mock structure size before serialization.
MaxMockBytes int
}
MockGenerationOptions controls how much work the renderer may spend generating mock values.
Zero or negative values use the package defaults. OpenAPI schema constraints such as maxLength are still used as validity hints, but they are not treated as permission to perform unbounded generation work.
type MockGenerator ¶
type MockGenerator struct {
// contains filtered or unexported fields
}
MockGenerator generates mocks for high-level mockable structs or *base.Schema pointers.
Mockable structs can provide the following fields:
- Example: any type, this is the default example to use if no examples are present.
- Examples: *orderedmap.Map[string, *base.Example], this is a map of examples keyed by name.
- Schema: *base.SchemaProxy, this is the schema to use if no examples are present.
Use NewMockGenerator or NewMockGeneratorWithDictionary to create a new mock generator.
Example (GenerateBurgerMock_yaml) ¶
// create a new YAML mock generator
mg := NewMockGenerator(YAML)
burgerShop, _ := os.ReadFile("../test_specs/burgershop.openapi.yaml")
// create a new document from specification and build a v3 model.
document, _ := libopenapi.NewDocument(burgerShop)
v3Model, _ := document.BuildV3Model()
// create a mock of the Burger model
burgerModel := v3Model.Model.Components.Schemas.GetOrZero("Burger")
burger := burgerModel.Schema()
mock, err := mg.GenerateMock(burger, "")
if err != nil {
panic(err)
}
fmt.Println(string(mock))
Output: name: Big Mac numPatties: 2
Example (GenerateFriesMock_json) ¶
// create a new YAML mock generator
mg := NewMockGenerator(JSON)
burgerShop, _ := os.ReadFile("../test_specs/burgershop.openapi.yaml")
// create a new document from specification and build a v3 model.
document, _ := libopenapi.NewDocument(burgerShop)
v3Model, _ := document.BuildV3Model()
// create a mock of the Fries model
friesModel := v3Model.Model.Components.Schemas.GetOrZero("Fries")
fries := friesModel.Schema()
mock, err := mg.GenerateMock(fries, "")
if err != nil {
panic(err)
}
fmt.Println(string(mock))
Output: {"favoriteDrink":{"drinkType":"coke","size":"M"},"potatoShape":"Crispy Shoestring"}
Example (GeneratePolymorphicMock_json) ¶
mg := NewMockGenerator(JSON)
// create a new YAML mock generator
burgerShop, _ := os.ReadFile("../test_specs/burgershop.openapi.yaml")
// create a new document from specification and build a v3 model.
document, _ := libopenapi.NewDocument(burgerShop)
v3Model, _ := document.BuildV3Model()
// create a mock of the SomePayload component, which uses polymorphism (incorrectly)
payloadModel := v3Model.Model.Components.Schemas.GetOrZero("SomePayload")
payload := payloadModel.Schema()
mock, err := mg.GenerateMock(payload, "")
if err != nil {
panic(err)
}
fmt.Println(string(mock))
Output: {"drinkType":"coke","size":"M"}
Example (GenerateRequestMock_json) ¶
// create a new YAML mock generator
mg := NewMockGenerator(JSON)
burgerShop, _ := os.ReadFile("../test_specs/burgershop.openapi.yaml")
// create a new document from specification and build a v3 model.
document, _ := libopenapi.NewDocument(burgerShop)
v3Model, _ := document.BuildV3Model()
// create a mock of the burger request model, extracted from the operation directly.
burgerRequestModel := v3Model.Model.Paths.PathItems.GetOrZero("/burgers").
Post.RequestBody.Content.GetOrZero("application/json")
// use the 'cakeBurger' example to generate a mock
mock, err := mg.GenerateMock(burgerRequestModel, "cakeBurger")
if err != nil {
panic(err)
}
fmt.Println(string(mock))
Output: {"name":"Chocolate Cake Burger","numPatties":5}
Example (GenerateResponseMock_json) ¶
mg := NewMockGenerator(JSON)
// create a new YAML mock generator
burgerShop, _ := os.ReadFile("../test_specs/burgershop.openapi.yaml")
// create a new document from specification and build a v3 model.
document, _ := libopenapi.NewDocument(burgerShop)
v3Model, _ := document.BuildV3Model()
// create a mock of the burger response model, extracted from the operation directly.
burgerResponseModel := v3Model.Model.Paths.PathItems.GetOrZero("/burgers").
Post.Responses.Codes.GetOrZero("200").Content.GetOrZero("application/json")
// use the 'filetOFish' example to generate a mock
mock, err := mg.GenerateMock(burgerResponseModel, "filetOFish")
if err != nil {
panic(err)
}
fmt.Println(string(mock))
Output: {"name":"Filet-O-Fish","numPatties":1}
func NewMockGenerator ¶
func NewMockGenerator(mockType MockType) *MockGenerator
NewMockGenerator creates a MockGenerator using the default dictionary.
The default is located at /usr/share/dict/words on most systems. Windows users need to use NewMockGeneratorWithDictionary to specify a custom dictionary.
func NewMockGeneratorWithDictionary ¶
func NewMockGeneratorWithDictionary(dictionaryLocation string, mockType MockType) *MockGenerator
NewMockGeneratorWithDictionary creates a MockGenerator using a custom dictionary file.
The location of a text file with one word per line is expected.
func (*MockGenerator) DisableRequiredCheck ¶ added in v0.16.8
func (mg *MockGenerator) DisableRequiredCheck()
DisableRequiredCheck disables required-property filtering when rendering schema-based mocks.
When disabled, all properties are rendered, not just required properties.
func (*MockGenerator) GenerateMock ¶
func (mg *MockGenerator) GenerateMock(mock any, name string) ([]byte, error)
GenerateMock generates a mock for a high-level mockable struct or *base.Schema pointer.
The name parameter is optional. When provided, GenerateMock attempts to select a matching named example. If name is empty, the first available example is used.
func (*MockGenerator) RenderXML ¶ added in v0.36.0
func (mg *MockGenerator) RenderXML(value any, schema *highbase.Schema) []byte
RenderXML renders a value as XML. If schema is provided, uses its XML metadata (xml.name, xml.attribute, xml.namespace, xml.prefix, xml.wrapped) for correct output. If schema is nil, falls back to basic element-based XML using map keys as element names.
Note: nodeType "cdata" is treated as "text" in this version because Go's xml.Encoder has no first-class CDATA token support.
func (*MockGenerator) SetMockGenerationOptions ¶ added in v0.36.5
func (mg *MockGenerator) SetMockGenerationOptions(options MockGenerationOptions)
SetMockGenerationOptions sets work and output budgets for generated mock values.
Zero or negative option values are replaced with the package defaults.
func (*MockGenerator) SetPretty ¶
func (mg *MockGenerator) SetPretty()
SetPretty configures JSON mocks to render with indentation and newlines.
JSON mocks render as a single line by default. This option affects only JSON; YAML is always rendered in YAML form.
func (*MockGenerator) SetSeed ¶ added in v0.25.4
func (mg *MockGenerator) SetSeed(seed int64)
SetSeed sets a specific seed for the random number generator used by this mock generator. This is useful for generating deterministic mocks for testing purposes.
func (*MockGenerator) SetUnresolvedRefHandler ¶ added in v0.36.0
func (mg *MockGenerator) SetUnresolvedRefHandler(handler UnresolvedRefHandler)
SetUnresolvedRefHandler sets a callback that is invoked when a $ref cannot be resolved during mock rendering.
type SchemaRenderer ¶
type SchemaRenderer struct {
// contains filtered or unexported fields
}
SchemaRenderer generates mock values from schemas, examples and schema constraints.
When a dictionary is configured, it is used as the source for generated words.
func CreateRendererUsingDefaultDictionary ¶
func CreateRendererUsingDefaultDictionary() *SchemaRenderer
CreateRendererUsingDefaultDictionary creates a SchemaRenderer using the default dictionary file.
The default dictionary is located at /usr/share/dict/words on most systems. Windows users need to use CreateRendererUsingDictionary to specify a custom dictionary.
func CreateRendererUsingDictionary ¶
func CreateRendererUsingDictionary(dictionaryLocation string) *SchemaRenderer
CreateRendererUsingDictionary creates a SchemaRenderer using a custom dictionary file.
The location of a text file with one word per line is expected.
func (*SchemaRenderer) DisableRequiredCheck ¶ added in v0.13.12
func (wr *SchemaRenderer) DisableRequiredCheck()
DisableRequiredCheck disables required-property filtering when rendering a schema.
When disabled, all properties are rendered, not just required properties. https://github.com/pb33f/libopenapi/issues/200
func (*SchemaRenderer) DiveIntoSchema ¶
func (wr *SchemaRenderer) DiveIntoSchema(schema *base.Schema, key string, structure map[string]any, visited map[string]bool, depth int) bool
DiveIntoSchema renders a schema into structure at key.
Examples are preferred. If no examples are available, the renderer generates a value from the schema type, format and pattern.
func (*SchemaRenderer) PseudoUUID ¶
func (wr *SchemaRenderer) PseudoUUID() string
PseudoUUID returns a UUID-shaped random value for mock data.
func (*SchemaRenderer) RandomFloat64 ¶
func (wr *SchemaRenderer) RandomFloat64() float64
RandomFloat64 returns a random float64 between 0 and 1.
func (*SchemaRenderer) RandomInt ¶
func (wr *SchemaRenderer) RandomInt(min, max int64) int64
RandomInt returns a random integer between min and max.
func (*SchemaRenderer) RandomWord ¶
func (wr *SchemaRenderer) RandomWord(min, max int64, depth int) string
RandomWord returns a random word between the min and max lengths.
If no dictionary is configured, RandomWord returns a generated alphabetic string. Set min and max to 0 to return the selected dictionary word without length filtering. The depth parameter prevents unbounded retries.
func (*SchemaRenderer) RenderSchema ¶
func (wr *SchemaRenderer) RenderSchema(schema *base.Schema) any
RenderSchema renders a schema into a value that can be serialized as JSON or YAML.
RenderSchema preserves its historical best-effort behavior. Use RenderSchemaWithError to enforce and inspect mock generation work budget failures.
func (*SchemaRenderer) RenderSchemaWithError ¶ added in v0.36.5
func (wr *SchemaRenderer) RenderSchemaWithError(schema *base.Schema) (any, error)
RenderSchemaWithError renders a schema into a value that can be serialized as JSON or YAML.
If mock generation exceeds a configured work budget, the returned error wraps ErrMockGenerationBudgetExceeded.
func (*SchemaRenderer) SetMockGenerationOptions ¶ added in v0.36.5
func (wr *SchemaRenderer) SetMockGenerationOptions(options MockGenerationOptions)
SetMockGenerationOptions sets work and output budgets for generated mock values.
Zero or negative option values are replaced with the package defaults.
func (*SchemaRenderer) SetSeed ¶ added in v0.25.4
func (wr *SchemaRenderer) SetSeed(seed int64)
SetSeed sets a specific seed for the random number generator used by this renderer. This is useful for generating deterministic mocks for testing purposes.
func (*SchemaRenderer) SetUnresolvedRefHandler ¶ added in v0.36.0
func (wr *SchemaRenderer) SetUnresolvedRefHandler(handler UnresolvedRefHandler)
SetUnresolvedRefHandler sets a callback that is invoked when a $ref cannot be resolved during rendering.
type UnresolvedRefHandler ¶ added in v0.36.0
type UnresolvedRefHandler func(propertyName string, proxy *base.SchemaProxy, err error)
UnresolvedRefHandler is called when a $ref property cannot be resolved during rendering.