shared

package
v2.2.3 Latest Latest
Warning

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

Go to latest
Published: Jul 31, 2026 License: MIT Imports: 18 Imported by: 0

Documentation

Overview

Package shared contains common shared information, and utilities.

Index

Constants

View Source
const (
	// Development is the development environment.
	Development = "development"

	// Integration is the integration environment.
	Integration = "integration"

	// Production is the production environment.
	Production = "production"

	// Staging is the staging environment.
	Staging = "staging"

	// Testing is the testing environment.
	Testing = "testing"
)
View Source
const (
	StatusPending = 0
	StatusActive  = 1
	StatusDeleted = 99
)

General Status Codes

View Source
const (
	// DatabaseName is the database name.
	DatabaseName = Test

	// TableName is the table/collection/index/etc name.
	TableName = Test

	// DefaultTimeout is the default timeout.
	DefaultTimeout = 30 * time.Minute

	// DocumentID is the document ID.
	DocumentID = "VFzrpYMBXu5BQSZxo0qX"

	// DocumentIDInvalid is an invalid document ID.
	DocumentIDInvalid = "VFzrpYMBXu5BQSZxo0qY"

	// DocumentName is the document name.
	DocumentName = Test

	// DocumentNameUpdated is the updated document name.
	DocumentNameUpdated = "Test2"

	// DocumentVersion is the document version.
	DocumentVersion = "1.0.0"

	RoleName = "test"

	// Test name.
	Test = "test"
)
View Source
const Timeout = 30 * time.Second

Timeout is the default timeout.

Variables

View Source
var (
	// TestData is the test data.
	TestData = &TestDataS{
		Name:    DocumentName,
		Version: DocumentVersion,
	}

	// TestDataWithID is the test data.
	TestDataWithID = &TestDataWithIDS{
		ID:      DocumentID,
		Name:    DocumentName,
		Version: DocumentVersion,
	}

	// UpdatedTestData is the updated test data.
	UpdatedTestData = &TestDataS{
		Name:    DocumentNameUpdated,
		Version: DocumentVersion,
	}

	// UpdatedTestDataID is the updated test data with ID.
	UpdatedTestDataID = &TestDataWithIDS{
		ID:      DocumentID,
		Name:    DocumentNameUpdated,
		Version: DocumentVersion,
	}
)
View Source
var TimeoutPing = 10 * time.Second

TimeoutPing is the timeout for ping.

Functions

func ApplyListParams added in v2.2.3

func ApplyListParams(docs [][]byte, prm *list.List) ([][]byte, error)

ApplyListParams post-processes the documents an in-process adapter collected, honoring the List params that adapter cannot push down to its backend.

Order matters and follows SQL: sort the full matched set, then paginate that ordering, then project. Projecting first would drop the sort key; paginating first would return the wrong page.

It exists so the adapters that must materialize their results anyway — memory, file, sftp, bolt, redis — honor Sort, Limit, Offset and Fields identically instead of each ignoring a different subset. Backends that can push these down (the SQL adapters) should keep doing so; this is for the ones that cannot.

A nil prm leaves docs untouched.

func AssembleItems added in v2.2.3

func AssembleItems(docs [][]byte) []byte

AssembleItems wraps documents into the `{"items":[...]}` envelope the in-process adapters unmarshal into the caller's destination.

func CreateHTTPTestServer

func CreateHTTPTestServer(
	statusCode int,
	headers map[string]string,
	queryParams map[string]string,
	body string,
) *httptest.Server

CreateHTTPTestServer creates a mocked HTTP server. Don't forget to defer close it!

SEE: Test for usage.

func Decode

func Decode(r io.Reader, v any) error

Decode process stream `r` into `v` and returns an error if any.

func Encode

func Encode(w io.Writer, v any) error

Encode process `v` into stream `w` and returns an error if any.

func ErrorContains

func ErrorContains(err error, text ...string) bool

ErrorContains checks if an error contains a string.

func GenerateID

func GenerateID(ct string) string

GenerateID generates MD5 hash (content-based) based on content. Good to be used to avoid duplicated messages.

func GenerateUUID

func GenerateUUID() string

GenerateUUID generates a RFC4122 UUID and DCE 1.1: Authentication and Security Services.

func IsEnvironment

func IsEnvironment(environments ...string) bool

IsEnvironment determines if the current environment is one of the provided.

func Marshal

func Marshal(v any) ([]byte, error)

Marshal with custom error.

func PaginateDocuments added in v2.2.3

func PaginateDocuments(docs [][]byte, offset, limit int) [][]byte

PaginateDocuments applies offset then limit to docs.

A non-positive limit means "no limit". That matches the params package, where Limit carries `validate:"omitempty,gt=0"` so zero is the unset value — note that list.New() defaults Limit to 10, so an adapter that honors this helper returns 10 records by default where it previously returned every record.

An offset past the end yields an empty slice rather than an error.

func PrintErrorMessages

func PrintErrorMessages(errors ...error) string

PrintErrorMessages prints the concatenated error messages.

func ProjectDocuments added in v2.2.3

func ProjectDocuments(docs [][]byte, fields []string) ([][]byte, error)

ProjectDocuments reduces each document to the requested fields.

An empty field list returns docs untouched. A field absent from a document is omitted rather than emitted as null, so projecting never invents keys.

func ReadAll

func ReadAll(r io.Reader) ([]byte, error)

ReadAll reads all the data from `r` and returns an error if any.

func ResetCounters added in v2.2.3

func ResetCounters(counters ...*expvar.Int)

ResetCounters zeroes the given metrics.

Storage metrics are process-global, keyed by storage name, so every test in a package accumulates into the same counters. A test that asserts absolute counter values must therefore start from a known baseline — without one, its expectations change the moment any other test touches the same adapter.

func SliceContains

func SliceContains(source []string, text string) bool

SliceContains returns true if the slice contains the string.

NOTE: It's case insensitive.

NOTE: @andres moved to here.

func SortDocuments added in v2.2.3

func SortDocuments(docs [][]byte, s customsort.SortSlice) ([][]byte, error)

SortDocuments orders docs — each a marshalled JSON object — according to s.

s is a `[][]string` of `[key, order]` pairs, applied left to right: the first pair is the primary key, the second breaks its ties, and so on. `order` is `asc` or `desc`, matching customsort; an unrecognised order is rejected rather than silently treated as ascending.

The sort is stable, so documents equal on every requested key keep the order the backend produced them in.

func TargetName

func TargetName(name, alternative string) (string, error)

TargetName returns the provided target name, or the configured one. A target, depending on the storage, is a collection, a table, a bucket, etc. For ElasticSearch - as it doesn't have a concept of a database - the target is the index.

func Unmarshal

func Unmarshal(data []byte, v any) error

Unmarshal with custom error.

func ValidateSQLIdentifier added in v2.2.0

func ValidateSQLIdentifier(s string) error

ValidateSQLIdentifier ensures s is a plain (optionally dot-qualified) SQL identifier, so it can be safely interpolated into a statement as a table name. It rejects anything carrying quotes, spaces, or statement separators, which would otherwise allow SQL injection through the target parameter.

Types

type HTTPMethod

type HTTPMethod string

HTTPMethod is the HTTP method.

const (
	// MethodGet is the HTTP GET method.
	MethodGet HTTPMethod = http.MethodGet

	// MethodPost is the HTTP POST method.
	MethodPost HTTPMethod = http.MethodPost

	// MethodPut is the HTTP PUT method.
	MethodPut HTTPMethod = http.MethodPut

	// MethodPatch is the HTTP PATCH method.
	MethodPatch HTTPMethod = http.MethodPatch

	// MethodDelete is the HTTP DELETE method.
	MethodDelete HTTPMethod = http.MethodDelete
)

func (HTTPMethod) String

func (m HTTPMethod) String() string

type ResponseTestDataWithIDS

type ResponseTestDataWithIDS struct {
	Items []TestDataWithIDS `json:"items"`
}

ResponseTestDataWithIDS is the response from the Redis list SCAN command.

type TestDataS

type TestDataS struct {
	Name    string `db:"name"    dbType:"varchar(255)" json:"name,omitempty"    query:"name"`
	Version string `db:"version" dbType:"varchar(255)" json:"version,omitempty" query:"version"`
}

TestDataS is the test data definition.

type TestDataWithIDS

type TestDataWithIDS struct {
	ID      string `bson:"_id"   db:"id"               dbType:"varchar(255)"    json:"id,omitempty" query:"id"`
	Name    string `db:"name"    dbType:"varchar(255)" json:"name,omitempty"    query:"name"`
	Version string `db:"version" dbType:"varchar(255)" json:"version,omitempty" query:"version"`
}

TestDataWithIDS is the test data definition.

Jump to

Keyboard shortcuts

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