iriscontainer

package module
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Sep 26, 2025 License: MIT Imports: 4 Imported by: 0

README

InterSystems IRIS Testcontainers for Go

Goal

The goal of this project is to make it easy to run tests with InterSystems IRIS Database via Testcontainers.

Usage

Read to original Testcontainers documentation: https://golang.testcontainers.org/quickstart/

package tests_test

import (
	"context"
	"database/sql"
	"flag"
	"log"
	"os"
	"testing"

	"github.com/stretchr/testify/require"
	"github.com/testcontainers/testcontainers-go"

	// Import IRIS SQL driver
	_ "github.com/caretdev/go-irisnative"
	iriscontainer "github.com/caretdev/testcontainers-iris-go"
)

var connectionString string = "iris://_SYSTEM:SYS@localhost:1972/USER"

var container *iriscontainer.IRISContainer = nil

func TestMain(m *testing.M) {
	var (
		useContainer   bool
		containerImage string
	)
	flag.BoolVar(&useContainer, "container", true, "Use container image.")
	flag.StringVar(&containerImage, "container-image", "", "Container image.")
	flag.Parse()
	var err error
	ctx := context.Background()
	if useContainer || containerImage != "" {
		options := []testcontainers.ContainerCustomizer{
			iriscontainer.WithNamespace("TEST"),
			iriscontainer.WithUsername("testuser"),
			iriscontainer.WithPassword("testpassword"),
		}
		if containerImage != "" {
			container, err = iriscontainer.Run(ctx, containerImage, options...)
		} else {
			// or use default docker image
			container, err = iriscontainer.RunContainer(ctx, options...)
		}
		if err != nil {
			log.Println("Failed to start container:", err)
			os.Exit(1)
		}
		defer container.Terminate(ctx)
		connectionString = container.MustConnectionString(ctx)
		log.Println("Container started successfully", connectionString)
	}

	var exitCode int = 0

	exitCode = m.Run()

	if container != nil {
		container.Terminate(ctx)
	}
	os.Exit(exitCode)
}

func openDbWrapper[T require.TestingT](t T, dsn string) *sql.DB {
	db, err := sql.Open(`intersystems`, dsn)
	require.NoError(t, err)
	require.NoError(t, db.Ping())
	return db
}

func closeDbWrapper[T require.TestingT](t T, db *sql.DB) {
	if db == nil {
		return
	}
	require.NoError(t, db.Close())
}

func TestOpen(t *testing.T) {
	db := openDbWrapper(t, connectionString)
	defer closeDbWrapper(t, db)

	var (
		namespace string
		username  string
	)
	res := db.QueryRow(`SELECT $namespace, $username`)
	require.NoError(t, res.Scan(&namespace, &username))
	require.Equal(t, "TEST", namespace)
	require.Equal(t, "testuser", username)
}

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func WithNamespace

func WithNamespace(namespace string) testcontainers.CustomizeRequestOption

func WithPassword

func WithPassword(password string) testcontainers.CustomizeRequestOption

func WithUsername

func WithUsername(username string) testcontainers.CustomizeRequestOption

Types

type IRISContainer

type IRISContainer struct {
	testcontainers.Container
	// contains filtered or unexported fields
}

func Run

Run creates an instance of the IRIS container type

func (*IRISContainer) ConnectionString

func (c *IRISContainer) ConnectionString(ctx context.Context) (string, error)

func (*IRISContainer) MustConnectionString

func (c *IRISContainer) MustConnectionString(ctx context.Context) string

Jump to

Keyboard shortcuts

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