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

Add integration test framework for isolated #3000

Open
wants to merge 2 commits into
base: dev
Choose a base branch
from

Conversation

andystaples
Copy link
Contributor

  • Add integration testing project
  • Methods for interacting with "func", "azurite", etc
  • One app with basic "Hello Cities" scenario
  • Build script that
    • installs a local copy of Core Tools
    • builds and deploys the extensions to the function app
    • builds the function app
    • installs and launches azurite

Pull request checklist

  • My changes do not require documentation changes
    • Otherwise: Documentation PR is ready to merge and referenced in pending_docs.md
  • My changes should not be added to the release notes for the next release
    • Otherwise: I've added my notes to release_notes.md
  • My changes do not need to be backported to a previous version
    • Otherwise: Backport tracked by issue/PR #issue_or_pr
  • I have added all required tests (Unit tests, E2E tests)
  • My changes do not require any extra work to be leveraged by OutOfProc SDKs
    • Otherwise: That work is being tracked here: #issue_or_pr_in_each_sdk
  • My changes do not change the version of the WebJobs.Extensions.DurableTask package
    • Otherwise: major or minor version updates are reflected in /src/Worker.Extensions.DurableTask/AssemblyInfo.cs
  • My changes do not add EventIds to our EventSource logs
    • Otherwise: Ensure the EventIds are within the supported range in our existing Windows infrastructure. You may validate this with a deployed app's telemetry. You may also extend the range by completing a PR such as this one.
  • My changes should be added to v3.x branch.
    • Otherwise: This change only applies to Durable Functions v2.x and will not be merged to branch v3.x.

- One app with basic "Hello Cities" scenario
@andystaples andystaples requested a review from cgillum December 18, 2024 19:43
@andystaples andystaples force-pushed the andystaples/isolated-integration-testing-framework branch from 2e4c00e to 9a68303 Compare December 18, 2024 19:50
Copy link
Member

@cgillum cgillum left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggest a slightly revised file structure for this, basically putting all end-to-end related code under a test/e2e directory.

/test/e2e/Apps/DotNetIsolated/App.csproj
/test/e2e/Apps/DotNetIsolated/...
/test/e2e/Tests/E2ETests.csproj
/test/e2e/Tests/...

In the future, we can add other language-specific apps under the /test/e2e/Apps/ directory too.

{
public static Process GetFuncHostProcess(bool enableAuth = false)
{
var funcProcess = new Process();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: let's wait to create the Process object until the time when we're actually use it. This is especially important for disposable objects, like Process, which can cause memory/handle leaks if they are created but not disposed (which will happen if you create it and we throw an exception in line 25 or line 39).


var e2eAppPath = Path.GetDirectoryName(e2eHostJson);

var cliPath = Path.Combine(rootDir, @"test/DotnetIsolatedE2ETests/Azure.Functions.Cli/func");
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems to imply that the func.exe tool is checked into the repo, which I assume is not your intention. I recommend putting it into a temporary directory instead.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

func isn't checked into the repo, but running the build-e2e-test.ps1 script will install it into this location. Useful for several reasons -

  1. Durable "power users" often modify the Core Tools in the PATH, we want an unmodified copy running for these tests
  2. Pipeline automation will have to take this step anyway, might as well do it in this script

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can modify the install directory - but for the pipeline scenario it is most useful to have it inside the repo folder structure somewhere. Dotnet worker does it in the root.

Copy link
Collaborator

@bachuv bachuv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for opening this PR!

<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.21.0" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.DurableTask" Version="3.1.2" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.DurableTask" Version="1.3.2" />
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it possible to add a project reference to the Worker Extensions package like this example instead of referencing a specific version?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we resolve the warnings that are showing up in this PR?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add a simple README for this project explaining the scripts that we have and how the fixtures and helper files are used?

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

Successfully merging this pull request may close these issues.

3 participants