dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.36k stars 4.75k forks source link

[tests] Apple mobile test coverage improvements #84254

Open kotlarmilos opened 1 year ago

kotlarmilos commented 1 year ago

Description

This issue lists improvements in Apple mobile infrastructure and test coverage. The tasks are categorized into four main areas: test coverage, reliability, scalability, and monitoring.

Expand runtime tests coverage

The primary goal is to align test coverage with the production environments, ensuring validation across all scenarios. Currently, only legacy runtime tests are executed on Apple mobile platforms using the interpreter, with a subset of smoke tests executed with Native AOT. The library and functional tests utilize the Mono AOT compiler. List of tasks:

Scalability

The primary goal is to improve the overall test build and execution speed. List of tasks:

Reliability

The primary goal is to establish a stable infrastructure environment for test execution. List of tasks:

Monitoring

The primary goal of monitoring should be enabling effective triage of active issues and tracking the reliability of tests and infrastructure over time. A list of tasks will be added.

ghost commented 1 year ago

Tagging subscribers to 'os-ios': @steveisok, @akoeplinger See info in area-owners.md if you want to be subscribed.

Issue Details
## Description This issue aims to expand the coverage of iOS runtime tests and improve the build process. ### Expand runtime tests coverage on iOS Currently, only `tracing/eventpipe` is running on iOS/iOSSimulator using interpreter as a fallback. This issue aims to expand the coverage of iOS runtime tests by including other testing groups and enabling full AOT compilation. ### Parallel AOT compilation To improve build time, the AOT compilation could be moved to Helix and executed simultaneously before the test execution. Additionally, unifying AOT compilation in one target would improve code maintenance as several targets use `MonoAOTCompiler` and `AppleAppBuilderTask` tasks. ### Split build and test execution To mitigate various transient issues, build and test execution could be divided into separate steps. The test build should build the repository, create tests, and zip artifacts (as done in `build-test-job.yml`). The test execution should download the artifacts, unzip them, and send the tests to Helix for AOT compilation and execution (as done in `run-test-job.yml`). ## Tasks - [ ] Identify other testing groups that could be executed on iOS/iOSSimulator and enable full AOT compilation for iOS/iOSSimulator tests - [ ] `baseservices` - [ ] `JIT` - [ ] `GC` - [ ] `ilverify` - [ ] `Interop` - [ ] `Loader` - [ ] `tracing` - [ ] Move AOT compilation to Helix and execute it in parallel with test execution - [ ] Unify AOT compilation to improve code maintenance - [ ] Separate build and test execution into separate builds
Author: kotlarmilos
Assignees: kotlarmilos
Labels: `test-enhancement`, `area-Infrastructure-mono`, `os-ios`
Milestone: Future
kotlarmilos commented 1 year ago

To mitigate various transient issues, build and test execution could be divided into separate steps. The test build should build the runtime and tests, and zip artifacts. The test execution should download the artifacts, unzip them, and send the tests to Helix for AOT compilation and execution. Additionally, a single build could be shared across runtime, library, and functional tests.

@steveisok I think you mentioned once this may not be a good approach. My assumption is that it may reduce costs and development time in cases when transient issues occur. What could be the potential downsides of such an approach? Are there some bottlenecks?