UNPKG

@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
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); } }); }); });