Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DynamoDB server doesn't start when running jest #199

Open
venkatesh-kl opened this issue Mar 10, 2023 · 1 comment
Open

DynamoDB server doesn't start when running jest #199

venkatesh-kl opened this issue Mar 10, 2023 · 1 comment

Comments

@venkatesh-kl
Copy link

I have tried to use jest-dynamodb in my test suite. I am not able to run dynamodb via jest-dynamodb. I have to manually run dynamodb using docker & then only the tests start to run. I have created a basic example based on jest's documentation but of no use. Strangely, It works on my colleagues' machines.

Environment details:
Node version: 14.20.1
Java version: 1.8.0_202

I am seeing the below error when I don't start the dynamodb via docker.

Determining test suites to run...2023-03-10 13:08:24.550:WARN:oejs.HttpChannel:qtp1583353301-14: /
java.lang.NoClassDefFoundError: com/almworks/sqlite4java/SQLiteJob
        at com.amazonaws.services.dynamodbv2.local.server.LocalDynamoDBRequestHandler.getDBAccess(LocalDynamoDBRequestHandler.java:208)
        at com.amazonaws.services.dynamodbv2.local.server.LocalDynamoDBRequestHandler.getHandler(LocalDynamoDBRequestHandler.java:199)
        at com.amazonaws.services.dynamodbv2.local.server.LocalDynamoDBRequestHandler.createTable(LocalDynamoDBRequestHandler.java:252)
        at com.amazonaws.services.dynamodbv2.local.dispatchers.CreateTableDispatcher.enact(CreateTableDispatcher.java:18)
        at com.amazonaws.services.dynamodbv2.local.dispatchers.CreateTableDispatcher.enact(CreateTableDispatcher.java:12)
        at com.amazonaws.services.dynamodbv2.local.server.LocalDynamoDBServerHandler.packageDynamoDBResponse(LocalDynamoDBServerHandler.java:408)
        at com.amazonaws.services.dynamodbv2.local.server.LocalDynamoDBServerHandler.handle(LocalDynamoDBServerHandler.java:495)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:190)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)        
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.Server.handle(Server.java:516)
        at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:137)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
        at java.lang.Thread.run(Thread.java:748)
Caused by:
java.lang.ClassNotFoundException: com.almworks.sqlite4java.SQLiteJob
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at com.amazonaws.services.dynamodbv2.local.server.LocalDynamoDBRequestHandler.getDBAccess(LocalDynamoDBRequestHandler.java:208)
        at com.amazonaws.services.dynamodbv2.local.server.LocalDynamoDBRequestHandler.getHandler(LocalDynamoDBRequestHandler.java:199)
        at com.amazonaws.services.dynamodbv2.local.server.LocalDynamoDBRequestHandler.createTable(LocalDynamoDBRequestHandler.java:252)
        at com.amazonaws.services.dynamodbv2.local.dispatchers.CreateTableDispatcher.enact(CreateTableDispatcher.java:18)
        at com.amazonaws.services.dynamodbv2.local.dispatchers.CreateTableDispatcher.enact(CreateTableDispatcher.java:12)
        at com.amazonaws.services.dynamodbv2.local.server.LocalDynamoDBServerHandler.packageDynamoDBResponse(LocalDynamoDBServerHandler.java:408)
        at com.amazonaws.services.dynamodbv2.local.server.LocalDynamoDBServerHandler.handle(LocalDynamoDBServerHandler.java:495)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
        at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:190)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:191)        
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
        at org.eclipse.jetty.server.Server.handle(Server.java:516)
        at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
        at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
        at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
        at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
        at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
        at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:137)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
        at java.lang.Thread.run(Thread.java:748)
SyntaxError: Jest: Got error running globalSetup - C:\users\username\jest-dynamodb\node_modules\@shelf\jest-dynamodb\lib\setup.js, reason: Unexpected token < in JSON at position 0
    at JSON.parse (<anonymous>)
    at C:\users\username\jest-dynamodb\node_modules\@aws-sdk\client-dynamodb\dist-cjs\protocols\Aws_json1_0.js:6388:21
    at processTicksAndRejections (internal/process/task_queues.js:95:5)
    at async parseErrorBody (C:\users\username\jest-dynamodb\node_modules\@aws-sdk\client-dynamodb\dist-cjs\protocols\Aws_json1_0.js:6393:19)
    at async deserializeAws_json1_0CreateTableCommandError (C:\users\username\jest-dynamodb\node_modules\@aws-sdk\client-dynamodb\dist-cjs\protocols\Aws_json1_0.js:788:15)
    at async C:\users\username\jest-dynamodb\node_modules\@aws-sdk\middleware-serde\dist-cjs\deserializerMiddleware.js:7:24
    at async C:\users\username\jest-dynamodb\node_modules\@aws-sdk\middleware-signing\dist-cjs\middleware.js:14:20
    at async C:\users\username\jest-dynamodb\node_modules\@aws-sdk\middleware-retry\dist-cjs\retryMiddleware.js:27:46
    at async C:\users\username\jest-dynamodb\node_modules\@aws-sdk\middleware-logger\dist-cjs\loggerMiddleware.js:5:22
    at async Promise.all (index 0)

I have added the basic example in this gist here: https://gist.github.com/klvenky/199b72cbe0e75f48dfd8ec3ec185510f.

I have already referred to similar issues like 99x/serverless-dynamodb-local#173, but didn't find anything helpful.

@mnoop
Copy link

mnoop commented Mar 14, 2023

I had the same error (NoClassDefFoundError).

In my case, I thought jest was stuck because it wasn't doing anything, so I stopped it. After that, I got this error. It turns out that jest-dynamodb was downloading the dynamodb jar in the background, and I corrupted the download by stopping it before it was done. This happened after I restarted my computer, since that clears the temp files, and it had to redownload.

I fixed it by deleting the dynamodb files that jest-dynamodb downloads. The default download location is path.join(os.tmpdir(), 'dynamodb-local'), which for me was /tmp/dynamodb-local/.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants