Skip to main content
Glama
FreePeak

Multi Database MCP Server

db_test.go3.55 kB
package db import ( "context" "database/sql" "testing" "time" "github.com/stretchr/testify/assert" ) func TestNewDatabase(t *testing.T) { tests := []struct { name string config Config expectErr bool }{ { name: "valid mysql config", config: Config{ Type: "mysql", Host: "localhost", Port: 3306, User: "user", Password: "password", Name: "testdb", }, expectErr: false, // In real test this would be true unless DB exists }, { name: "valid postgres config", config: Config{ Type: "postgres", Host: "localhost", Port: 5432, User: "user", Password: "password", Name: "testdb", }, expectErr: false, // In real test this would be true unless DB exists }, { name: "invalid driver", config: Config{ Type: "invalid", }, expectErr: true, }, { name: "empty config", config: Config{}, expectErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { // We're not actually connecting to a database in unit tests // This is a mock test that just verifies the code path _, err := NewDatabase(tt.config) if tt.expectErr { assert.Error(t, err) } else { // In a real test, we'd assert.NoError, but since we don't have actual // databases to connect to, we'll skip this check // assert.NoError(t, err) t.Skip("Skipping actual DB connection in unit test") } }) } } func TestConfigSetDefaults(t *testing.T) { config := Config{} config.SetDefaults() assert.Equal(t, 25, config.MaxOpenConns) assert.Equal(t, 5, config.MaxIdleConns) assert.Equal(t, 5*time.Minute, config.ConnMaxLifetime) } // MockDatabase implements Database interface for testing type MockDatabase struct { dbInstance *sql.DB driverNameVal string dsnVal string LastQuery string LastArgs []interface{} ReturnRows *sql.Rows ReturnRow *sql.Row ReturnErr error ReturnTx *sql.Tx ReturnResult sql.Result } func NewMockDatabase() *MockDatabase { return &MockDatabase{ driverNameVal: "mock", dsnVal: "mock://localhost/testdb", } } func (m *MockDatabase) Query(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) { m.LastQuery = query m.LastArgs = args return m.ReturnRows, m.ReturnErr } func (m *MockDatabase) QueryRow(ctx context.Context, query string, args ...interface{}) *sql.Row { m.LastQuery = query m.LastArgs = args return m.ReturnRow } func (m *MockDatabase) Exec(ctx context.Context, query string, args ...interface{}) (sql.Result, error) { m.LastQuery = query m.LastArgs = args return m.ReturnResult, m.ReturnErr } func (m *MockDatabase) BeginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error) { return m.ReturnTx, m.ReturnErr } func (m *MockDatabase) Connect() error { return m.ReturnErr } func (m *MockDatabase) Close() error { return m.ReturnErr } func (m *MockDatabase) Ping(ctx context.Context) error { return m.ReturnErr } func (m *MockDatabase) DriverName() string { return m.driverNameVal } func (m *MockDatabase) ConnectionString() string { return m.dsnVal } func (m *MockDatabase) DB() *sql.DB { return m.dbInstance } // Example of a test that uses the mock database func TestUsingMockDatabase(t *testing.T) { mockDB := NewMockDatabase() // This test demonstrates how to use the mock database assert.Equal(t, "mock", mockDB.DriverName()) assert.Equal(t, "mock://localhost/testdb", mockDB.ConnectionString()) }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/FreePeak/db-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server