Initial commit
This commit is contained in:
117
test_data/init_baseline.sql
Executable file
117
test_data/init_baseline.sql
Executable file
@@ -0,0 +1,117 @@
|
||||
-- Baseline Database Initialization Script
|
||||
-- This creates a sample database structure for testing
|
||||
|
||||
USE master;
|
||||
GO
|
||||
|
||||
-- Create test database
|
||||
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'TestDB_Baseline')
|
||||
BEGIN
|
||||
CREATE DATABASE TestDB_Baseline;
|
||||
END
|
||||
GO
|
||||
|
||||
USE TestDB_Baseline;
|
||||
GO
|
||||
|
||||
-- Create sample tables
|
||||
|
||||
-- Dimension: Customers
|
||||
CREATE TABLE dbo.DimCustomer (
|
||||
CustomerID INT PRIMARY KEY IDENTITY(1,1),
|
||||
CustomerName NVARCHAR(100) NOT NULL,
|
||||
Email NVARCHAR(100),
|
||||
City NVARCHAR(50),
|
||||
Country NVARCHAR(50),
|
||||
CreatedDate DATETIME DEFAULT GETDATE()
|
||||
);
|
||||
|
||||
-- Dimension: Products
|
||||
CREATE TABLE dbo.DimProduct (
|
||||
ProductID INT PRIMARY KEY IDENTITY(1,1),
|
||||
ProductName NVARCHAR(100) NOT NULL,
|
||||
Category NVARCHAR(50),
|
||||
UnitPrice DECIMAL(10,2),
|
||||
IsActive BIT DEFAULT 1
|
||||
);
|
||||
|
||||
-- Fact: Sales
|
||||
CREATE TABLE dbo.FactSales (
|
||||
SaleID INT PRIMARY KEY IDENTITY(1,1),
|
||||
CustomerID INT,
|
||||
ProductID INT,
|
||||
SaleDate DATE,
|
||||
Quantity INT,
|
||||
UnitPrice DECIMAL(10,2),
|
||||
TotalAmount DECIMAL(10,2),
|
||||
TaxAmount DECIMAL(10,2),
|
||||
FOREIGN KEY (CustomerID) REFERENCES dbo.DimCustomer(CustomerID),
|
||||
FOREIGN KEY (ProductID) REFERENCES dbo.DimProduct(ProductID)
|
||||
);
|
||||
|
||||
-- Insert sample data (TEST DATA ONLY - NOT REAL CUSTOMERS)
|
||||
|
||||
-- Customers
|
||||
INSERT INTO dbo.DimCustomer (CustomerName, Email, City, Country) VALUES
|
||||
('TestCustomer1', 'test1@test.local', 'City1', 'Country1'),
|
||||
('TestCustomer2', 'test2@test.local', 'City2', 'Country2'),
|
||||
('TestCustomer3', 'test3@test.local', 'City3', 'Country3'),
|
||||
('TestCustomer4', 'test4@test.local', 'City4', 'Country4'),
|
||||
('TestCustomer5', 'test5@test.local', 'City5', 'Country5');
|
||||
|
||||
-- Products
|
||||
INSERT INTO dbo.DimProduct (ProductName, Category, UnitPrice, IsActive) VALUES
|
||||
('Laptop', 'Electronics', 999.99, 1),
|
||||
('Mouse', 'Electronics', 29.99, 1),
|
||||
('Keyboard', 'Electronics', 79.99, 1),
|
||||
('Monitor', 'Electronics', 299.99, 1),
|
||||
('Desk Chair', 'Furniture', 199.99, 1),
|
||||
('Desk', 'Furniture', 399.99, 1),
|
||||
('Notebook', 'Stationery', 4.99, 1),
|
||||
('Pen Set', 'Stationery', 12.99, 1);
|
||||
|
||||
-- Sales (100 records)
|
||||
DECLARE @i INT = 1;
|
||||
WHILE @i <= 100
|
||||
BEGIN
|
||||
INSERT INTO dbo.FactSales (CustomerID, ProductID, SaleDate, Quantity, UnitPrice, TotalAmount, TaxAmount)
|
||||
VALUES (
|
||||
(ABS(CHECKSUM(NEWID())) % 5) + 1, -- Random CustomerID 1-5
|
||||
(ABS(CHECKSUM(NEWID())) % 8) + 1, -- Random ProductID 1-8
|
||||
DATEADD(DAY, -ABS(CHECKSUM(NEWID())) % 365, GETDATE()), -- Random date in last year
|
||||
(ABS(CHECKSUM(NEWID())) % 10) + 1, -- Random Quantity 1-10
|
||||
(ABS(CHECKSUM(NEWID())) % 900) + 100.00, -- Random price 100-1000
|
||||
0, -- Will be calculated
|
||||
0 -- Will be calculated
|
||||
);
|
||||
|
||||
-- Calculate amounts
|
||||
UPDATE dbo.FactSales
|
||||
SET TotalAmount = Quantity * UnitPrice,
|
||||
TaxAmount = Quantity * UnitPrice * 0.1
|
||||
WHERE SaleID = @i;
|
||||
|
||||
SET @i = @i + 1;
|
||||
END
|
||||
GO
|
||||
|
||||
-- Create some views for testing
|
||||
CREATE VIEW dbo.vw_SalesSummary AS
|
||||
SELECT
|
||||
c.CustomerName,
|
||||
p.ProductName,
|
||||
s.SaleDate,
|
||||
s.Quantity,
|
||||
s.TotalAmount
|
||||
FROM dbo.FactSales s
|
||||
JOIN dbo.DimCustomer c ON s.CustomerID = c.CustomerID
|
||||
JOIN dbo.DimProduct p ON s.ProductID = p.ProductID;
|
||||
GO
|
||||
|
||||
-- Create statistics
|
||||
CREATE STATISTICS stat_sales_date ON dbo.FactSales(SaleDate);
|
||||
CREATE STATISTICS stat_customer_country ON dbo.DimCustomer(Country);
|
||||
GO
|
||||
|
||||
PRINT 'Baseline database initialized successfully';
|
||||
GO
|
||||
131
test_data/init_target.sql
Executable file
131
test_data/init_target.sql
Executable file
@@ -0,0 +1,131 @@
|
||||
-- Target Database Initialization Script
|
||||
-- This creates a similar structure with some intentional differences for testing
|
||||
|
||||
USE master;
|
||||
GO
|
||||
|
||||
-- Create test database
|
||||
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'TestDB_Target')
|
||||
BEGIN
|
||||
CREATE DATABASE TestDB_Target;
|
||||
END
|
||||
GO
|
||||
|
||||
USE TestDB_Target;
|
||||
GO
|
||||
|
||||
-- Create sample tables (similar to baseline with some differences)
|
||||
|
||||
-- Dimension: Customers (same structure)
|
||||
CREATE TABLE dbo.DimCustomer (
|
||||
CustomerID INT PRIMARY KEY IDENTITY(1,1),
|
||||
CustomerName NVARCHAR(100) NOT NULL,
|
||||
Email NVARCHAR(100),
|
||||
City NVARCHAR(50),
|
||||
Country NVARCHAR(50),
|
||||
CreatedDate DATETIME DEFAULT GETDATE()
|
||||
);
|
||||
|
||||
-- Dimension: Products (slightly different - added column)
|
||||
CREATE TABLE dbo.DimProduct (
|
||||
ProductID INT PRIMARY KEY IDENTITY(1,1),
|
||||
ProductName NVARCHAR(100) NOT NULL,
|
||||
Category NVARCHAR(50),
|
||||
UnitPrice DECIMAL(10,2),
|
||||
IsActive BIT DEFAULT 1,
|
||||
LastModified DATETIME DEFAULT GETDATE() -- Extra column for testing
|
||||
);
|
||||
|
||||
-- Fact: Sales (same structure)
|
||||
CREATE TABLE dbo.FactSales (
|
||||
SaleID INT PRIMARY KEY IDENTITY(1,1),
|
||||
CustomerID INT,
|
||||
ProductID INT,
|
||||
SaleDate DATE,
|
||||
Quantity INT,
|
||||
UnitPrice DECIMAL(10,2),
|
||||
TotalAmount DECIMAL(10,2),
|
||||
TaxAmount DECIMAL(10,2),
|
||||
FOREIGN KEY (CustomerID) REFERENCES dbo.DimCustomer(CustomerID),
|
||||
FOREIGN KEY (ProductID) REFERENCES dbo.DimProduct(ProductID)
|
||||
);
|
||||
|
||||
-- Insert sample data (TEST DATA ONLY - NOT REAL CUSTOMERS)
|
||||
|
||||
-- Customers
|
||||
INSERT INTO dbo.DimCustomer (CustomerName, Email, City, Country) VALUES
|
||||
('TestCustomer1', 'test1@test.local', 'City1', 'Country1'),
|
||||
('TestCustomer2', 'test2@test.local', 'City2', 'Country2'),
|
||||
('TestCustomer3', 'test3@test.local', 'City3', 'Country3'),
|
||||
('TestCustomer4', 'test4@test.local', 'City4', 'Country4'),
|
||||
('TestCustomer5', 'test5@test.local', 'City5', 'Country5');
|
||||
|
||||
-- Products (with LastModified)
|
||||
INSERT INTO dbo.DimProduct (ProductName, Category, UnitPrice, IsActive, LastModified) VALUES
|
||||
('Laptop', 'Electronics', 999.99, 1, GETDATE()),
|
||||
('Mouse', 'Electronics', 29.99, 1, GETDATE()),
|
||||
('Keyboard', 'Electronics', 79.99, 1, GETDATE()),
|
||||
('Monitor', 'Electronics', 299.99, 1, GETDATE()),
|
||||
('Desk Chair', 'Furniture', 199.99, 1, GETDATE()),
|
||||
('Desk', 'Furniture', 399.99, 1, GETDATE()),
|
||||
('Notebook', 'Stationery', 4.99, 1, GETDATE()),
|
||||
('Pen Set', 'Stationery', 12.99, 1, GETDATE());
|
||||
|
||||
-- Sales (95 records - 5 fewer than baseline for testing)
|
||||
DECLARE @i INT = 1;
|
||||
WHILE @i <= 95
|
||||
BEGIN
|
||||
INSERT INTO dbo.FactSales (CustomerID, ProductID, SaleDate, Quantity, UnitPrice, TotalAmount, TaxAmount)
|
||||
VALUES (
|
||||
(ABS(CHECKSUM(NEWID())) % 5) + 1,
|
||||
(ABS(CHECKSUM(NEWID())) % 8) + 1,
|
||||
DATEADD(DAY, -ABS(CHECKSUM(NEWID())) % 365, GETDATE()),
|
||||
(ABS(CHECKSUM(NEWID())) % 10) + 1,
|
||||
(ABS(CHECKSUM(NEWID())) % 900) + 100.00,
|
||||
0,
|
||||
0
|
||||
);
|
||||
|
||||
-- Calculate amounts
|
||||
UPDATE dbo.FactSales
|
||||
SET TotalAmount = Quantity * UnitPrice,
|
||||
TaxAmount = Quantity * UnitPrice * 0.1
|
||||
WHERE SaleID = @i;
|
||||
|
||||
SET @i = @i + 1;
|
||||
END
|
||||
GO
|
||||
|
||||
-- Create the same view
|
||||
CREATE VIEW dbo.vw_SalesSummary AS
|
||||
SELECT
|
||||
c.CustomerName,
|
||||
p.ProductName,
|
||||
s.SaleDate,
|
||||
s.Quantity,
|
||||
s.TotalAmount
|
||||
FROM dbo.FactSales s
|
||||
JOIN dbo.DimCustomer c ON s.CustomerID = c.CustomerID
|
||||
JOIN dbo.DimProduct p ON s.ProductID = p.ProductID;
|
||||
GO
|
||||
|
||||
-- Create an extra table that doesn't exist in baseline
|
||||
CREATE TABLE dbo.TempProcessing (
|
||||
ProcessID INT PRIMARY KEY IDENTITY(1,1),
|
||||
ProcessName NVARCHAR(100),
|
||||
Status NVARCHAR(20),
|
||||
CreatedDate DATETIME DEFAULT GETDATE()
|
||||
);
|
||||
|
||||
INSERT INTO dbo.TempProcessing (ProcessName, Status) VALUES
|
||||
('DataLoad', 'Completed'),
|
||||
('Validation', 'In Progress');
|
||||
GO
|
||||
|
||||
-- Create statistics
|
||||
CREATE STATISTICS stat_sales_date ON dbo.FactSales(SaleDate);
|
||||
CREATE STATISTICS stat_customer_country ON dbo.DimCustomer(Country);
|
||||
GO
|
||||
|
||||
PRINT 'Target database initialized successfully';
|
||||
GO
|
||||
97
test_data/setup_test_environment.sh
Executable file
97
test_data/setup_test_environment.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
# Setup script for test SQL Server environment
|
||||
|
||||
set -e
|
||||
|
||||
echo "=========================================="
|
||||
echo "SQL Server Test Environment Setup"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
|
||||
# Check if Docker is installed
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "Error: Docker is not installed"
|
||||
echo "Please install Docker first: https://docs.docker.com/get-docker/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if Docker Compose is available (either standalone or plugin)
|
||||
if ! command -v docker-compose &> /dev/null && ! docker compose version &> /dev/null; then
|
||||
echo "Error: Docker Compose is not installed"
|
||||
echo "Please install Docker Compose first"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Determine which compose command to use
|
||||
if docker compose version &> /dev/null; then
|
||||
COMPOSE_CMD="docker compose"
|
||||
else
|
||||
COMPOSE_CMD="docker-compose"
|
||||
fi
|
||||
|
||||
echo "Step 1: Starting SQL Server containers..."
|
||||
$COMPOSE_CMD -f docker-compose.test.yml up -d
|
||||
|
||||
echo ""
|
||||
echo "Step 2: Waiting for SQL Server to be ready..."
|
||||
echo "This may take 30-60 seconds..."
|
||||
|
||||
# Set default password if not provided
|
||||
SA_PASSWORD=${SA_PASSWORD:-YourStrong!Passw0rd}
|
||||
|
||||
# Wait for baseline server
|
||||
echo -n "Waiting for baseline server"
|
||||
for i in {1..30}; do
|
||||
if docker exec drt-sqlserver-baseline /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "$SA_PASSWORD" -C -Q "SELECT 1" &> /dev/null; then
|
||||
echo " ✓"
|
||||
break
|
||||
fi
|
||||
echo -n "."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# Wait for target server
|
||||
echo -n "Waiting for target server"
|
||||
for i in {1..30}; do
|
||||
if docker exec drt-sqlserver-target /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "$SA_PASSWORD" -C -Q "SELECT 1" &> /dev/null; then
|
||||
echo " ✓"
|
||||
break
|
||||
fi
|
||||
echo -n "."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Step 3: Initializing baseline database..."
|
||||
docker exec -i drt-sqlserver-baseline /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "$SA_PASSWORD" -C < test_data/init_baseline.sql
|
||||
|
||||
echo ""
|
||||
echo "Step 4: Initializing target database..."
|
||||
docker exec -i drt-sqlserver-target /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "$SA_PASSWORD" -C < test_data/init_target.sql
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "Setup completed successfully!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "SQL Server instances are running:"
|
||||
echo " Baseline: localhost:1433"
|
||||
echo " Target: localhost:1434"
|
||||
echo ""
|
||||
echo "Credentials:"
|
||||
echo " Username: sa"
|
||||
echo " Password: (set via SA_PASSWORD environment variable)"
|
||||
echo ""
|
||||
echo "Test databases:"
|
||||
echo " Baseline: TestDB_Baseline"
|
||||
echo " Target: TestDB_Target"
|
||||
echo ""
|
||||
echo "To test the connection:"
|
||||
echo " drt discover --server localhost --database TestDB_Baseline --output config_test.yaml"
|
||||
echo ""
|
||||
echo "To stop the servers:"
|
||||
echo " $COMPOSE_CMD -f docker-compose.test.yml down"
|
||||
echo ""
|
||||
echo "To stop and remove all data:"
|
||||
echo " $COMPOSE_CMD -f docker-compose.test.yml down -v"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user