Skip to content

Commit 737e57c

Browse files
committed
test fixes
1 parent 645e81a commit 737e57c

File tree

2 files changed

+102
-30
lines changed

2 files changed

+102
-30
lines changed

.github/workflows/extension-test.yml

+23-4
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,36 @@ jobs:
2323
uses: actions/setup-node@v4
2424
with:
2525
node-version: '18'
26+
27+
- name: Install system dependencies
28+
run: |
29+
sudo apt-get update
30+
sudo apt-get install -y xvfb dbus dbus-x11 at-spi2-core libsecret-1-0
31+
sudo dbus-uuidgen --ensure
32+
sudo service dbus start
33+
34+
- name: Start X11 and D-Bus
35+
run: |
36+
/usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 &
37+
sleep 3
38+
dbus-launch --auto-syntax > /tmp/dbus.env
39+
source /tmp/dbus.env
2640
2741
- name: Install dependencies
2842
run: npm run install:all
2943

30-
- name: Working directory
31-
run: ls
44+
- name: Verify environment
45+
run: |
46+
echo "Checking display server..."
47+
ps aux | grep Xvfb
48+
echo "Checking dbus..."
49+
dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames
3250
3351
- name: Compile TypeScript
3452
run: npm run compile
3553

3654
- name: Run tests
37-
run: xvfb-run -a npm run test:extension
38-
55+
run: |
56+
source /tmp/dbus.env
57+
xvfb-run -a --server-args="-screen 0 1024x768x24" npm run test:extension
3958

src/test/extension.test.ts

+79-26
Original file line numberDiff line numberDiff line change
@@ -149,10 +149,13 @@ suite("Roo Code Extension Test Suite", () => {
149149

150150
test("Should handle prompt and response correctly", async function () {
151151
// @ts-ignore
152-
this.timeout(600000) // Increase timeout for API request
152+
this.timeout(900000) // Increase timeout for CI environment
153153

154-
const timeout = 60000
155-
const interval = 1000
154+
const timeout = 120000 // Increase timeout for CI
155+
const interval = 2000 // Increase interval to reduce CPU usage
156+
const authTimeout = 300000 // 5 minutes timeout for auth provider
157+
158+
console.log("Starting prompt and response test...")
156159

157160
// Get extension instance
158161
const extension = await vscode.extensions.getExtension("RooVeterinaryInc.roo-cline")
@@ -162,20 +165,23 @@ suite("Roo Code Extension Test Suite", () => {
162165
}
163166

164167
// Activate extension and get API
168+
console.log("Activating extension...")
165169
const api = await extension.activate()
166170
if (!api) {
167171
assert.fail("Extension API not found")
168172
return
169173
}
170174

171175
// Get provider
176+
console.log("Getting provider...")
172177
const provider = await api.sidebarProvider
173178
if (!provider) {
174179
assert.fail("Provider not found")
175180
return
176181
}
177182

178183
// Set up API configuration
184+
console.log("Setting up API configuration...")
179185
await provider.updateGlobalState("apiProvider", "openrouter")
180186
await provider.updateGlobalState("openRouterModelId", "anthropic/claude-3.5-sonnet")
181187
const apiKey = process.env.OPENROUTER_API_KEY
@@ -186,6 +192,7 @@ suite("Roo Code Extension Test Suite", () => {
186192
await provider.storeSecret("openRouterApiKey", apiKey)
187193

188194
// Create webview panel with development options
195+
console.log("Creating webview panel...")
189196
const extensionUri = extension.extensionUri
190197
const panel = vscode.window.createWebviewPanel("roo-cline.SidebarProvider", "Roo Code", vscode.ViewColumn.One, {
191198
enableScripts: true,
@@ -203,57 +210,96 @@ suite("Roo Code Extension Test Suite", () => {
203210
}
204211

205212
// Initialize provider with panel
213+
console.log("Initializing provider with panel...")
206214
await provider.resolveWebviewView(panel)
207-
// Set up message tracking
215+
216+
// Set up message tracking with improved error handling
208217
let webviewReady = false
209218
let messagesReceived = false
219+
let authProviderRegistered = false
210220
const originalPostMessage = await provider.postMessageToWebview.bind(provider)
221+
211222
// @ts-ignore
212223
provider.postMessageToWebview = async function (message) {
213-
console.log("Posting message:", message)
214-
if (message.type === "state") {
215-
webviewReady = true
216-
//console.log("Webview state received:", message)
217-
if (message.state?.codeMessages?.length > 0) {
218-
messagesReceived = true
219-
console.log("Messages in state:", message.state.codeMessages)
224+
try {
225+
console.log("Posting message:", JSON.stringify(message))
226+
if (message.type === "state") {
227+
webviewReady = true
228+
console.log("Webview state received")
229+
if (message.state?.codeMessages?.length > 0) {
230+
messagesReceived = true
231+
console.log("Messages in state:", message.state.codeMessages)
232+
}
233+
if (message.state?.authProvider) {
234+
authProviderRegistered = true
235+
console.log("Auth provider registered")
236+
}
220237
}
238+
await originalPostMessage(message)
239+
} catch (error) {
240+
console.error("Error in postMessage:", error)
241+
throw error
221242
}
222-
await originalPostMessage(message)
223243
}
224244

225-
// Wait for webview to launch and receive initial state
245+
// Wait for auth provider to register
246+
console.log("Waiting for auth provider registration...")
226247
let startTime = Date.now()
227-
while (Date.now() - startTime < 180000) {
248+
while (Date.now() - startTime < authTimeout) {
249+
if (authProviderRegistered) {
250+
console.log("Auth provider successfully registered")
251+
break
252+
}
253+
if (Date.now() - startTime > 60000 && !authProviderRegistered) {
254+
console.log("Auth provider status check at 1 minute mark:", await provider.getState())
255+
}
256+
await new Promise((resolve) => setTimeout(resolve, interval))
257+
}
258+
259+
if (!authProviderRegistered) {
260+
throw new Error("Timeout waiting for auth provider registration")
261+
}
262+
263+
// Wait for webview to launch and receive initial state
264+
console.log("Waiting for webview initialization...")
265+
startTime = Date.now()
266+
while (Date.now() - startTime < 300000) {
267+
// 5 minutes timeout for CI
228268
console.log("Webview ready:", webviewReady)
229269
if (webviewReady) {
230-
// Wait an additional second for webview to fully initialize
231-
await new Promise((resolve) => setTimeout(resolve, 1000))
270+
console.log("Webview successfully initialized")
271+
// Wait additional time for webview to fully initialize
272+
await new Promise((resolve) => setTimeout(resolve, 5000))
232273
break
233274
}
275+
if (Date.now() - startTime > 60000 && !webviewReady) {
276+
console.log("Webview status check at 1 minute mark")
277+
}
234278
await new Promise((resolve) => setTimeout(resolve, interval))
235279
}
236280

237281
if (!webviewReady) {
238-
console.log("Timeout waiting for webview to be ready: could be running in GHA")
282+
throw new Error("Timeout waiting for webview initialization")
239283
}
240284

241285
// Send webviewDidLaunch to initialize chat
286+
console.log("Sending webviewDidLaunch...")
242287
await provider.postMessageToWebview({ type: "webviewDidLaunch" })
243288
console.log("Sent webviewDidLaunch")
244289

245290
// Wait for webview to fully initialize
246-
await new Promise((resolve) => setTimeout(resolve, 2000))
291+
await new Promise((resolve) => setTimeout(resolve, 5000))
247292

248293
// Restore original postMessage
249294
provider.postMessageToWebview = originalPostMessage
250295

251296
// Wait for OpenRouter models to be fully loaded
297+
console.log("Waiting for OpenRouter models...")
252298
startTime = Date.now()
253299
while (Date.now() - startTime < timeout) {
254300
const models = await provider.readOpenRouterModels()
255301
if (models && Object.keys(models).length > 0) {
256-
//console.log("OpenRouter models loaded")
302+
console.log("OpenRouter models successfully loaded")
257303
break
258304
}
259305
await new Promise((resolve) => setTimeout(resolve, interval))
@@ -263,21 +309,24 @@ suite("Roo Code Extension Test Suite", () => {
263309
const prompt = "Hello world, what is your name?"
264310
console.log("Sending prompt:", prompt)
265311

266-
// Start task
312+
// Start task with improved error handling
267313
try {
268314
await api.startNewTask(prompt)
269-
console.log("Task started")
315+
console.log("Task successfully started")
270316
} catch (error) {
271317
console.error("Error starting task:", error)
318+
console.log("Provider state at error:", await provider.getState())
272319
throw error
273320
}
274321

275322
// Wait for messages to be processed
323+
console.log("Waiting for response...")
276324
startTime = Date.now()
277325
let responseReceived = false
278326
while (Date.now() - startTime < timeout) {
279-
console.log("State:", await provider.getState())
280-
console.log("Cline:", provider.cline?.clineMessages)
327+
const state = await provider.getState()
328+
console.log("Current state:", JSON.stringify(state))
329+
281330
// Check provider.clineMessages
282331
const messages = provider.clineMessages
283332
if (messages && messages.length > 0) {
@@ -293,7 +342,7 @@ suite("Roo Code Extension Test Suite", () => {
293342
}
294343
}
295344

296-
//Check provider.cline.clineMessages
345+
// Check provider.cline.clineMessages
297346
const clineMessages = provider.cline?.clineMessages
298347
if (clineMessages && clineMessages.length > 0) {
299348
console.log("Cline messages:", JSON.stringify(clineMessages, null, 2))
@@ -309,13 +358,17 @@ suite("Roo Code Extension Test Suite", () => {
309358
}
310359

311360
await new Promise((resolve) => setTimeout(resolve, interval))
312-
console.log("Waiting for response...")
313361
}
314362

315363
if (!responseReceived) {
316364
console.log("Final provider state:", await provider.getState())
317-
throw new Error("Did not receive any response")
365+
throw new Error("Did not receive expected response within timeout period")
318366
}
367+
368+
console.log("Test completed successfully")
369+
} catch (error) {
370+
console.error("Test failed with error:", error)
371+
throw error
319372
} finally {
320373
panel.dispose()
321374
}

0 commit comments

Comments
 (0)