Giter Club home page Giter Club logo

laravel-temporal's Issues

Random error in testing environment

Hi @cappuc!

Tests are randomly failing with the following error:

Error 'rpc: can't find service kv.Clear' on tcp://127.0.0.1:6001

Tried to bootstrap the server/workers after each test, but it didn't help.
Do you have any idea why this happen?

I have a fresh Laravel 10 & Sail dev environment with an additional GRPC extension installed.

RuntimeException: Failed to start Temporal test server: qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory

Hi There Community,

I am running the latest Laravel version with the latest version of the package on an Apple M1 using Laravel Sail.

I wanted to use the Temporal server built-in on this package for testing purposes so I imported the trait WithTemporal into the testing and added the Temporal::fake(); at the top. However, when running the test, I found the following error:

Failed to start Temporal test server: qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory

I have been reading about the issue and it seems that the docker image needs to be from a specific Linux version that is not what the Sail team is currently using.

Does this mean the testing server will not run on the Sail Docker environment running on Mac?
Thanks

Here is a copy of the full test:

class PayOutWorkflowTest extends TestCase
{
    use WithTemporal;

    /**
     * @test
     */
    public function it_can_run_payout_workflow()
    {
        Temporal::fake();

        $workflowMock = Temporal::mockWorkflow(PayOutWorkflowInterface::class)
            ->onTaskQueue('default')
            ->andReturn('result');

        $workflowMock->assertDispatched();
    }
}

Allow in config/temporal.php to over ride the WorkerFactory::class that is being used by the worker

WorkerFactory::class allows to define many configurations in the Temporal workflow, it's important when using this package that a user can easily extend the WorkerFactory class and make changes as necessary.

Another option is to allow to change the default Worker command in WorkCommand:

            ...['-o', sprintf('server.command=%s ./vendor/bin/roadrunner-temporal-worker', (new PhpExecutableFinder())->find())],

add here an option to override the roadrunner-temportal-worker path.

Temporal mock workflow unable to be picked up during test

I try to mock a workflow and test it with test utility. However, the mock workflow seems to be not being picked up.

My test file:

use WithTemporal;

public function setUp(): void
{   
        parent::setUp();

}

/**
 * @test
 * /
public function test_function():
{
        Temporal::fake();
        $myWorkflowMock = Temporal::mockWorkflow(MyWorkflowInterface::class)
            ->onTaskQueue('default')
            ->andReturn('result');

        $myService = app(MyServiceInterface::class);
        $myService->start();

        $myWorkflowMock->assertDispatched();
}

My service function:

public function start(): string
{
        $workflowStub = Temporal::newWorkflow()
            ->withRetryOptions(
                RetryOptions::new()->withMaximumAttempts(1)
            )
            ->build(MyWorkflowInterface::class);

        $workflow = app(WorkflowClient::class)
            ->start($workflowStub);

        return $workflow->getExecution()->getID();
}

When I dump $workflow->getExecution() in my service function, I am able to get an execution ID and workflow ID. However, my test is failing and saying the workflow is not dispatched. Looks like the original workflow is still getting dispatched.

Is there anyway to debug this?

Getting an error with the chokidar package when using php artisan temporal:work --watch

This is the full error:

Comand:
sail artisan temporal:work --watch

Watcher process has terminated. Please ensure Node and chokidar are installed.
file:///var/www/html/vendor/keepsuit/laravel-temporal/bin/file-watcher.js:1
const chokidar = require('chokidar');
ReferenceError: require is not defined in ES module scope, you can use import instead
This file is being treated as an ES module because it has a '.js' file extension and '/var/www/html/package.json' contains "type": "module". To treat it as a CommonJS script, rename it to use the '.cjs' file extension.
    at file:///var/www/html/vendor/keepsuit/laravel-temporal/bin/file-watcher.js:1:18
    at ModuleJob.run (node:internal/modules/esm/module_job:194:25)

The solution in file-watcher.js file change: this: const chokidar = require('chokidar'); for this: import chokidar from "chokidar";

Unable to find rr binary

Trying to start temporal:work I'm getting the warning

"Your RoadRunner binary version may be incompatible with laravel temporal."

And then the worker exits. Tracking it down a bit it seems that its unable to find the rr binary.

I've checked and it does exist in vender/bin is there a permission error or something I'm missing?

Root folder for Temporal stuff

Hi @cappuc

Wouldn't it be better to have Workflows and Activities registered automatically/placed by artisan commands in the app/Temporal folder instead of the root? In bigger projects that's a good separation because you can instantly see it's Temporal-related, especially if you have Actions and other Laravel layers in the root.

Currently:

Screenshot_1

It could have been:

Screenshot_2

Relations of UUID models not working when using temporal serialize

The model -

class SmsCampaignSend extends Model implements TemporalSerializable
{
    use HasMeta;
    use SoftDeletes;
    use TemporalEloquentSerialize;
    use HasUuids;

    protected $fillable = [
        'id',
        'sms_campaign_id',
        'status',
        'meta',
    ];

    public function campaign(): BelongsTo
    {
        return $this->belongsTo(SmsCampaign::class);
    }
}

doesn't work when calling the $campaignSend->campaign relation in an activity after doing the serialize

Running child workflows don't get picked up by the worker

Hi, after creating child workflows with

$smsWorkflow = Temporal::newChildWorkflow()
                    ->build(SendSmsWorkflow::class);
                $res = $smsWorkflow->handle($data);

Child workflow class -

#[WorkflowInterface]
class SendSmsWorkflow
{
    public function __construct()
    {
        //..
    }

    #[WorkflowMethod]
    public function handle(CampaignSendToBuildSmsData $data): \Generator
    {
        //..
    }
}

The child workflows don't get picked up by the worker -
artisan temporal:work

But when creating it as a new workflow it does get picked up. Am I missing something?

Support for parallel testing?

About

Currently, the tests are failing when running in parallel (unable to start the worker).
To run tests in parallel, I'm using --parallel flag available in Pest v2 (uses brianium/paratest under the hood).


scr

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.