@ufdevsllc/authme2.0
Version:
SDK for license management and remote monitoring with automatic system tracking, license validation, and remote control capabilities
298 lines (250 loc) • 14.6 kB
JavaScript
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import LicenseMonitoringSDK from '../../index.js';
// Mock all the dependencies
vi.mock('../database-manager.js');
vi.mock('../license-validator.js');
vi.mock('../system-tracker.js');
vi.mock('../data-logger.js');
vi.mock('../remote-control-handler.js');
describe('System Tracking - Environment Integration Tests', () => {
let sdk;
const testLicenseKey = 'test-license-key-12345';
let originalEnv;
beforeEach(() => {
// Save original environment
originalEnv = { ...process.env };
sdk = new LicenseMonitoringSDK();
vi.clearAllMocks();
});
afterEach(async () => {
// Restore original environment
process.env = originalEnv;
if (sdk && sdk.initialized) {
// Mock cleanup methods to prevent errors
if (sdk.systemTracker) {
sdk.systemTracker.stopPeriodicTracking = vi.fn();
}
if (sdk.remoteControlHandler) {
sdk.remoteControlHandler.cleanup = vi.fn().mockResolvedValue();
}
if (sdk.licenseValidator) {
sdk.licenseValidator.cleanup = vi.fn().mockResolvedValue();
}
if (sdk.dataLogger) {
sdk.dataLogger.close = vi.fn().mockResolvedValue();
}
if (sdk.databaseManager) {
sdk.databaseManager.closeConnection = vi.fn().mockResolvedValue();
}
await sdk.shutdown();
}
});
describe('Development Environment', () => {
it('should initialize system tracking in development environment', async () => {
// Set development environment
process.env.NODE_ENV = 'development';
process.env.CORS_ORIGINS = 'http://localhost:3000';
process.env.SERVER_LOCATION = 'Local Development';
// Mock all component initializations
sdk.databaseManager.initMonitoringConnection = vi.fn().mockResolvedValue();
sdk.licenseValidator.initialize = vi.fn().mockResolvedValue();
sdk.licenseValidator.preventStartupOnInvalidLicense = vi.fn().mockResolvedValue();
sdk.dataLogger.init = vi.fn().mockResolvedValue();
sdk.systemTracker.startPeriodicTracking = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.initialize = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.startCommandPolling = vi.fn().mockResolvedValue();
await sdk.init(testLicenseKey);
expect(sdk.systemTracker.startPeriodicTracking).toHaveBeenCalledWith(testLicenseKey);
expect(sdk.componentsInitialized.systemTracker).toBe(true);
});
});
describe('Production Environment', () => {
it('should initialize system tracking in production environment', async () => {
// Set production environment
process.env.NODE_ENV = 'production';
process.env.CORS_ORIGINS = 'https://myapp.com,https://api.myapp.com';
process.env.SERVER_LOCATION = 'AWS US-East-1';
process.env.PORT = '8080';
// Mock all component initializations
sdk.databaseManager.initMonitoringConnection = vi.fn().mockResolvedValue();
sdk.licenseValidator.initialize = vi.fn().mockResolvedValue();
sdk.licenseValidator.preventStartupOnInvalidLicense = vi.fn().mockResolvedValue();
sdk.dataLogger.init = vi.fn().mockResolvedValue();
sdk.systemTracker.startPeriodicTracking = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.initialize = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.startCommandPolling = vi.fn().mockResolvedValue();
await sdk.init(testLicenseKey);
expect(sdk.systemTracker.startPeriodicTracking).toHaveBeenCalledWith(testLicenseKey);
expect(sdk.componentsInitialized.systemTracker).toBe(true);
});
});
describe('Staging Environment', () => {
it('should initialize system tracking in staging environment', async () => {
// Set staging environment
process.env.NODE_ENV = 'staging';
process.env.CORS_ORIGINS = 'https://staging.myapp.com';
process.env.SERVER_LOCATION = 'AWS US-West-2 Staging';
process.env.PORT = '3000';
// Mock all component initializations
sdk.databaseManager.initMonitoringConnection = vi.fn().mockResolvedValue();
sdk.licenseValidator.initialize = vi.fn().mockResolvedValue();
sdk.licenseValidator.preventStartupOnInvalidLicense = vi.fn().mockResolvedValue();
sdk.dataLogger.init = vi.fn().mockResolvedValue();
sdk.systemTracker.startPeriodicTracking = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.initialize = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.startCommandPolling = vi.fn().mockResolvedValue();
await sdk.init(testLicenseKey);
expect(sdk.systemTracker.startPeriodicTracking).toHaveBeenCalledWith(testLicenseKey);
expect(sdk.componentsInitialized.systemTracker).toBe(true);
});
});
describe('Docker Environment', () => {
it('should initialize system tracking in containerized environment', async () => {
// Set Docker environment variables
process.env.NODE_ENV = 'production';
process.env.DOCKER_CONTAINER = 'true';
process.env.CONTAINER_NAME = 'myapp-container';
process.env.CORS_ORIGINS = 'https://myapp.com';
process.env.SERVER_LOCATION = 'Docker Container - AWS ECS';
// Mock all component initializations
sdk.databaseManager.initMonitoringConnection = vi.fn().mockResolvedValue();
sdk.licenseValidator.initialize = vi.fn().mockResolvedValue();
sdk.licenseValidator.preventStartupOnInvalidLicense = vi.fn().mockResolvedValue();
sdk.dataLogger.init = vi.fn().mockResolvedValue();
sdk.systemTracker.startPeriodicTracking = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.initialize = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.startCommandPolling = vi.fn().mockResolvedValue();
await sdk.init(testLicenseKey);
expect(sdk.systemTracker.startPeriodicTracking).toHaveBeenCalledWith(testLicenseKey);
expect(sdk.componentsInitialized.systemTracker).toBe(true);
});
});
describe('Environment with Sensitive Variables', () => {
it('should initialize system tracking while filtering sensitive environment variables', async () => {
// Set environment with sensitive variables
process.env.NODE_ENV = 'production';
process.env.DATABASE_PASSWORD = 'super-secret-password';
process.env.API_KEY = 'secret-api-key';
process.env.JWT_SECRET = 'jwt-secret-token';
process.env.CORS_ORIGINS = 'https://myapp.com';
process.env.SERVER_LOCATION = 'Production Server';
process.env.PUBLIC_VAR = 'public-value';
// Mock all component initializations
sdk.databaseManager.initMonitoringConnection = vi.fn().mockResolvedValue();
sdk.licenseValidator.initialize = vi.fn().mockResolvedValue();
sdk.licenseValidator.preventStartupOnInvalidLicense = vi.fn().mockResolvedValue();
sdk.dataLogger.init = vi.fn().mockResolvedValue();
sdk.systemTracker.startPeriodicTracking = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.initialize = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.startCommandPolling = vi.fn().mockResolvedValue();
await sdk.init(testLicenseKey);
expect(sdk.systemTracker.startPeriodicTracking).toHaveBeenCalledWith(testLicenseKey);
expect(sdk.componentsInitialized.systemTracker).toBe(true);
});
});
describe('Minimal Environment', () => {
it('should initialize system tracking with minimal environment variables', async () => {
// Clear most environment variables, keep only essential ones
const essentialVars = ['NODE_ENV', 'PATH', 'HOME'];
Object.keys(process.env).forEach(key => {
if (!essentialVars.includes(key)) {
delete process.env[key];
}
});
process.env.NODE_ENV = 'test';
// Mock all component initializations
sdk.databaseManager.initMonitoringConnection = vi.fn().mockResolvedValue();
sdk.licenseValidator.initialize = vi.fn().mockResolvedValue();
sdk.licenseValidator.preventStartupOnInvalidLicense = vi.fn().mockResolvedValue();
sdk.dataLogger.init = vi.fn().mockResolvedValue();
sdk.systemTracker.startPeriodicTracking = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.initialize = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.startCommandPolling = vi.fn().mockResolvedValue();
await sdk.init(testLicenseKey);
expect(sdk.systemTracker.startPeriodicTracking).toHaveBeenCalledWith(testLicenseKey);
expect(sdk.componentsInitialized.systemTracker).toBe(true);
});
});
describe('System Tracking Resilience', () => {
it('should continue SDK initialization even if system tracking fails in any environment', async () => {
// Set any environment
process.env.NODE_ENV = 'production';
process.env.SERVER_LOCATION = 'Test Server';
// Mock successful components except system tracker
sdk.databaseManager.initMonitoringConnection = vi.fn().mockResolvedValue();
sdk.licenseValidator.initialize = vi.fn().mockResolvedValue();
sdk.licenseValidator.preventStartupOnInvalidLicense = vi.fn().mockResolvedValue();
sdk.dataLogger.init = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.initialize = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.startCommandPolling = vi.fn().mockResolvedValue();
// Mock system tracker failure
sdk.systemTracker.startPeriodicTracking = vi.fn().mockRejectedValue(
new Error('System tracking failed due to environment issues')
);
// Should still initialize successfully
await sdk.init(testLicenseKey);
expect(sdk.initialized).toBe(true);
expect(sdk.componentsInitialized.systemTracker).toBe(false);
expect(sdk.componentsInitialized.database).toBe(true);
expect(sdk.componentsInitialized.license).toBe(true);
expect(sdk.componentsInitialized.dataLogger).toBe(true);
expect(sdk.componentsInitialized.remoteControl).toBe(true);
});
it('should allow disabling system tracking via initialization options', async () => {
// Set any environment
process.env.NODE_ENV = 'production';
process.env.SERVER_LOCATION = 'Test Server';
// Mock all component initializations
sdk.databaseManager.initMonitoringConnection = vi.fn().mockResolvedValue();
sdk.licenseValidator.initialize = vi.fn().mockResolvedValue();
sdk.licenseValidator.preventStartupOnInvalidLicense = vi.fn().mockResolvedValue();
sdk.dataLogger.init = vi.fn().mockResolvedValue();
sdk.systemTracker.startPeriodicTracking = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.initialize = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.startCommandPolling = vi.fn().mockResolvedValue();
// Initialize with system tracking disabled
await sdk.init(testLicenseKey, { startSystemTracking: false });
expect(sdk.initialized).toBe(true);
expect(sdk.systemTracker.startPeriodicTracking).not.toHaveBeenCalled();
expect(sdk.componentsInitialized.systemTracker).toBe(false);
});
});
describe('Cross-Environment Consistency', () => {
it('should maintain consistent behavior across different environments', async () => {
const environments = [
{ NODE_ENV: 'development', SERVER_LOCATION: 'Local Dev' },
{ NODE_ENV: 'staging', SERVER_LOCATION: 'Staging Server' },
{ NODE_ENV: 'production', SERVER_LOCATION: 'Production Server' },
{ NODE_ENV: 'test', SERVER_LOCATION: 'Test Environment' }
];
for (const env of environments) {
// Reset SDK for each environment test
if (sdk.initialized) {
sdk.systemTracker.stopPeriodicTracking = vi.fn();
sdk.remoteControlHandler.cleanup = vi.fn().mockResolvedValue();
sdk.licenseValidator.cleanup = vi.fn().mockResolvedValue();
sdk.dataLogger.close = vi.fn().mockResolvedValue();
sdk.databaseManager.closeConnection = vi.fn().mockResolvedValue();
await sdk.shutdown();
}
sdk = new LicenseMonitoringSDK();
vi.clearAllMocks();
// Set environment
Object.assign(process.env, env);
// Mock all component initializations
sdk.databaseManager.initMonitoringConnection = vi.fn().mockResolvedValue();
sdk.licenseValidator.initialize = vi.fn().mockResolvedValue();
sdk.licenseValidator.preventStartupOnInvalidLicense = vi.fn().mockResolvedValue();
sdk.dataLogger.init = vi.fn().mockResolvedValue();
sdk.systemTracker.startPeriodicTracking = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.initialize = vi.fn().mockResolvedValue();
sdk.remoteControlHandler.startCommandPolling = vi.fn().mockResolvedValue();
await sdk.init(testLicenseKey);
// Verify consistent behavior
expect(sdk.initialized).toBe(true);
expect(sdk.systemTracker.startPeriodicTracking).toHaveBeenCalledWith(testLicenseKey);
expect(sdk.componentsInitialized.systemTracker).toBe(true);
}
});
});
});