mirror of
https://github.com/vega-org/vega-providers.git
synced 2026-04-17 15:41:45 +00:00
249 lines
6.3 KiB
JavaScript
249 lines
6.3 KiB
JavaScript
const axios = require("axios");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
|
|
/**
|
|
* Provider testing utility
|
|
*/
|
|
class ProviderTester {
|
|
constructor(serverUrl = "http://localhost:3001") {
|
|
this.serverUrl = serverUrl;
|
|
this.axios = axios.create({
|
|
baseURL: serverUrl,
|
|
timeout: 10000,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Test server connectivity
|
|
*/
|
|
async testConnection() {
|
|
try {
|
|
const response = await this.axios.get("/health");
|
|
console.log("✅ Server connection OK");
|
|
return true;
|
|
} catch (error) {
|
|
console.error("❌ Server connection failed:", error.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test manifest endpoint
|
|
*/
|
|
async testManifest() {
|
|
try {
|
|
const response = await this.axios.get("/manifest.json");
|
|
const providers = response.data;
|
|
|
|
console.log(`✅ Manifest OK - Found ${providers.length} providers:`);
|
|
providers.forEach((p) => {
|
|
console.log(` 📦 ${p.display_name} (${p.value}) v${p.version}`);
|
|
});
|
|
|
|
return providers;
|
|
} catch (error) {
|
|
console.error("❌ Manifest test failed:", error.message);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test individual provider modules
|
|
*/
|
|
async testProvider(providerName) {
|
|
console.log(`\n🧪 Testing provider: ${providerName}`);
|
|
|
|
const modules = ["catalog", "posts", "meta", "stream", "episodes"];
|
|
const results = {};
|
|
|
|
for (const module of modules) {
|
|
try {
|
|
const response = await this.axios.get(
|
|
`/dist/${providerName}/${module}.js`
|
|
);
|
|
results[module] = {
|
|
success: true,
|
|
size: response.data.length,
|
|
hasExports: response.data.includes("exports."),
|
|
};
|
|
console.log(` ✅ ${module}.js (${results[module].size} bytes)`);
|
|
} catch (error) {
|
|
results[module] = {
|
|
success: false,
|
|
error: error.response?.status === 404 ? "Not found" : error.message,
|
|
};
|
|
const isOptional = module === "episodes";
|
|
const icon = isOptional ? "⚠️ " : "❌";
|
|
console.log(
|
|
` ${icon} ${module}.js - ${results[module].error}${
|
|
isOptional ? " (optional)" : ""
|
|
}`
|
|
);
|
|
}
|
|
}
|
|
|
|
return results;
|
|
}
|
|
|
|
/**
|
|
* Test all providers
|
|
*/
|
|
async testAllProviders() {
|
|
console.log("🚀 Starting comprehensive provider test...\n");
|
|
|
|
// Test connection
|
|
const connected = await this.testConnection();
|
|
if (!connected) return;
|
|
|
|
// Test manifest
|
|
const providers = await this.testManifest();
|
|
if (!providers) return;
|
|
|
|
// Test each provider
|
|
const results = {};
|
|
for (const provider of providers) {
|
|
results[provider.value] = await this.testProvider(provider.value);
|
|
}
|
|
|
|
// Summary
|
|
console.log("\n📊 Test Summary:");
|
|
console.log("=".repeat(50));
|
|
|
|
let totalProviders = 0;
|
|
let passedProviders = 0;
|
|
|
|
for (const [providerName, modules] of Object.entries(results)) {
|
|
totalProviders++;
|
|
const requiredModules = ["catalog", "posts", "meta", "stream"];
|
|
const passedRequired = requiredModules.every(
|
|
(mod) => modules[mod]?.success
|
|
);
|
|
|
|
if (passedRequired) {
|
|
passedProviders++;
|
|
console.log(`✅ ${providerName} - All required modules OK`);
|
|
} else {
|
|
console.log(`❌ ${providerName} - Missing required modules`);
|
|
}
|
|
}
|
|
|
|
console.log(
|
|
`\n📈 Results: ${passedProviders}/${totalProviders} providers passed`
|
|
);
|
|
|
|
if (passedProviders === totalProviders) {
|
|
console.log("🎉 All providers are ready for testing!");
|
|
} else {
|
|
console.log("⚠️ Some providers need attention before testing.");
|
|
}
|
|
|
|
return results;
|
|
}
|
|
|
|
/**
|
|
* Trigger rebuild on server
|
|
*/
|
|
async rebuild() {
|
|
try {
|
|
console.log("🔨 Triggering rebuild...");
|
|
const response = await this.axios.post("/build");
|
|
console.log("✅ Rebuild completed");
|
|
return true;
|
|
} catch (error) {
|
|
console.error(
|
|
"❌ Rebuild failed:",
|
|
error.response?.data?.error || error.message
|
|
);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get server status
|
|
*/
|
|
async getStatus() {
|
|
try {
|
|
const response = await this.axios.get("/status");
|
|
const status = response.data;
|
|
|
|
console.log("📊 Server Status:");
|
|
console.log(` 🟢 Status: ${status.status}`);
|
|
console.log(` 🔌 Port: ${status.port}`);
|
|
console.log(` 📦 Providers: ${status.providers}`);
|
|
console.log(` 🕐 Last Build: ${status.buildTime || "Never"}`);
|
|
|
|
if (status.providerList.length > 0) {
|
|
console.log(" 📋 Available Providers:");
|
|
status.providerList.forEach((p) => console.log(` • ${p}`));
|
|
}
|
|
|
|
return status;
|
|
} catch (error) {
|
|
console.error("❌ Failed to get status:", error.message);
|
|
return null;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* CLI interface
|
|
*/
|
|
async function main() {
|
|
const args = process.argv.slice(2);
|
|
const command = args[0] || "test";
|
|
const providerName = args[1];
|
|
|
|
const tester = new ProviderTester();
|
|
|
|
switch (command) {
|
|
case "test":
|
|
if (providerName) {
|
|
await tester.testProvider(providerName);
|
|
} else {
|
|
await tester.testAllProviders();
|
|
}
|
|
break;
|
|
|
|
case "status":
|
|
await tester.getStatus();
|
|
break;
|
|
|
|
case "rebuild":
|
|
await tester.rebuild();
|
|
break;
|
|
|
|
case "connection":
|
|
await tester.testConnection();
|
|
break;
|
|
|
|
case "manifest":
|
|
await tester.testManifest();
|
|
break;
|
|
|
|
default:
|
|
console.log(`
|
|
Usage: node test-providers.js [command] [provider]
|
|
|
|
Commands:
|
|
test [provider] - Test all providers or specific provider
|
|
status - Show server status
|
|
rebuild - Trigger rebuild
|
|
connection - Test server connection
|
|
manifest - Test manifest endpoint
|
|
|
|
Examples:
|
|
node test-providers.js # Test all providers
|
|
node test-providers.js test vega # Test specific provider
|
|
node test-providers.js status # Show status
|
|
node test-providers.js rebuild # Rebuild and test
|
|
`);
|
|
}
|
|
}
|
|
|
|
if (require.main === module) {
|
|
main().catch(console.error);
|
|
}
|
|
|
|
module.exports = ProviderTester;
|