René's URL Explorer Experiment


Title: test: verify Kotlin interop with a unit test and a Kotlin sample operator E2E test by exijn · Pull Request #3513 · operator-framework/java-operator-sdk · GitHub

Open Graph Title: test: verify Kotlin interop with a unit test and a Kotlin sample operator E2E test by exijn · Pull Request #3513 · operator-framework/java-operator-sdk

X Title: test: verify Kotlin interop with a unit test and a Kotlin sample operator E2E test by exijn · Pull Request #3513 · operator-framework/java-operator-sdk

Description: Closes #2967 What this does Adds Kotlin interop test coverage in two forms, per review discussion: A unit-level smoke test in operator-framework-core verifying that JOSDK behaves correctly when a DependentResource is implemented in Kotlin. A new sample module, sample-operators/kotlin-operator, with a minimalist Kotlin operator and a full dual-mode (local + remote-deployed) E2E test, mirroring the other samples. Kotlin has no concept of checked vs. unchecked exceptions, so Kotlin code can throw a plain Exception from an overridden method (e.g. DependentResource#reconcile) without declaring it — even though the Java-declared method signature doesn't include throws Exception. Before #2965, NodeExecutor only caught RuntimeException, so such an exception thrown from Kotlin would silently bypass the workflow's error handling and not trigger a retry. 1. Unit-level smoke test (operator-framework-core) The new test (KotlinCheckedExceptionDependentResourceTest.kt): Defines a Kotlin DependentResource whose reconcile throws a custom checked Exception. Runs it through the real Workflow/WorkflowReconcileExecutor/NodeExecutor (no mocked cluster needed). Asserts the exception is captured in WorkflowReconcileResult#getErroredDependents() and that throwAggregateExceptionIfErrorsPresent() throws AggregatedOperatorException, confirming a retry would be triggered. I verified this test actually exercises the fix: temporarily reverting NodeExecutor's catch (Exception e) back to catch (RuntimeException e) (the pre-#2965 behavior) makes the test fail, since the checked exception is then silently swallowed and getErroredDependents() stays empty. Adds kotlin-maven-plugin (test scope only, 2.4.10) to operator-framework-core/pom.xml, compiling sources under src/test/kotlin. No other module is affected, and no Kotlin dependency is added to the main/runtime classpath. 2. New sample: sample-operators/kotlin-operator Per review feedback, added a full sample operator implemented entirely in Kotlin (CR, spec, status, reconciler, main), to validate more than just the checked-exception path: ConfigMapCopyReconciler copies spec.message from a ConfigMapCopy custom resource into a ConfigMap, exercising custom resource deserialization via the fabric8 client and the full reconciliation runtime (not just exception handling). ConfigMapCopyE2E is a dual-mode E2E test, following the same pattern as the other samples: LocallyRunOperatorExtension for local mode, ClusterDeployedOperatorExtension (+ a real Pod deployment described in k8s/operator.yaml, built via jib-maven-plugin) for remote mode. Wired into sample-operators/pom.xml and the end-to-end-tests matrix in .github/workflows/e2e-test.yml, so it runs against a real (Minikube) cluster in CI like the other samples. Relation to #2965 #2965 fixed NodeExecutor, AbstractWorkflowExecutor, and PollingEventSource to catch Exception instead of RuntimeException (with // Exception is required because of Kotlin comments already in place), and opened #2967 as a follow-up to add tests validating this behavior with actual Kotlin code. I also grepped the codebase for any remaining catch (RuntimeException in main sources and found none left to fix. Test plan ./mvnw -pl operator-framework-core -am test — unit test passes; verified it fails against the pre-#2965 catch (RuntimeException) behavior and passes against current catch (Exception) behavior ./mvnw -pl sample-operators/kotlin-operator -am test-compile — new sample module compiles, including CRD generation from the Kotlin-annotated custom resource sample-operators/kotlin-operator E2E test against a real cluster — will be exercised by the end-to-end-tests CI job (no local cluster available to verify manually in this environment)

Open Graph Description: Closes #2967 What this does Adds Kotlin interop test coverage in two forms, per review discussion: A unit-level smoke test in operator-framework-core verifying that JOSDK behaves correctly when a ...

X Description: Closes #2967 What this does Adds Kotlin interop test coverage in two forms, per review discussion: A unit-level smoke test in operator-framework-core verifying that JOSDK behaves correctly when a ...

Opengraph URL: https://github.com/operator-framework/java-operator-sdk/pull/3513

X: @github

direct link

Domain: github.com

react-profiling0
react-import-mapreact,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@d5750093facf
route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:ebc9d09c-c953-c962-3c58-9c0d6715fd0e
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idEC30:7C3DA:5DC9EB:7FA6DB:6AED5E40
html-safe-noncebec0f07113e3e5205aa71cece3e624be0c6ef458bac1cb377b98ed43a6a2ad25
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFQzMwOjdDM0RBOjVEQzlFQjo3RkE2REI6NkFFRDVFNDAiLCJ2aXNpdG9yX2lkIjoiMjczOTIwMjMzMDc1NzQ4NDgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmac6c16b0a6f6d81e08e3171ed16821fedaf427c496199d3fe9428e7ea3cbed5f75
hovercard-subject-tagpull_request:4133131318
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/operator-framework/java-operator-sdk/pull/3513/files
twitter:imagehttps://avatars.githubusercontent.com/u/218341304?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/218341304?s=400&v=4
og:image:altCloses #2967 What this does Adds Kotlin interop test coverage in two forms, per review discussion: A unit-level smoke test in operator-framework-core verifying that JOSDK behaves correctly when a ...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None56fb42677ae87ed3e64410323d67980aa65d0485568a7858f874e7edfc6d1c11
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/operator-framework/java-operator-sdk git https://github.com/operator-framework/java-operator-sdk.git
octolytics-dimension-user_id38202270
octolytics-dimension-user_loginoperator-framework
octolytics-dimension-repository_id188592933
octolytics-dimension-repository_nwooperator-framework/java-operator-sdk
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id188592933
octolytics-dimension-repository_network_root_nwooperator-framework/java-operator-sdk
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release9c9a37e2423ed382cf39f70b5aa4b4858b40a3b0
ui-targetcanary-1
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/operator-framework/java-operator-sdk/pull/3513/files#start-of-content
https://github.com/
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Foperator-framework%2Fjava-operator-sdk%2Fpull%2F3513%2Ffiles
GitHubRepository hosting, code review, and collaborationhttps://github.com/platform
CopilotAI coding agent for tasks, projects, and automated workhttps://github.com/features/copilot
ActionsCI/CD and automationhttps://github.com/features/actions
Code QualityQuality analysis, fixes, and enforcementhttps://github.com/features/code-quality
CodespacesCloud development environmentshttps://github.com/features/codespaces
Code SecurityVulnerability detection and remediationhttps://github.com/security/advanced-security/code-security
Secret ProtectionSecret scanning and leak preventionhttps://github.com/security/advanced-security/secret-protection
All Featureshttps://github.com/features
Documentationhttps://docs.github.com/en
Traininghttps://learn.github.com/skills
Certificationshttps://learn.github.com/credentials
Build with Copilothttps://github.com/features/ai
Customize Copilothttps://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/customize-copilot-overview
Integrationshttps://github.com/marketplace
Trending reposhttps://github.com/trending
GitHub Sponsorshttps://github.com/open-source/sponsors
Developer articleshttps://github.com/resources/articles
ChangelogYour source for the latest features, improvements, and fixes across GitHub products, all in one place.https://github.blog/changelog/
Enterpriseshttps://github.com/enterprise
Teamhttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
See all industrieshttps://github.com/solutions/industry
Why GitHubhttps://github.com/why-github
Customer Storieshttps://github.com/customer-stories
Business insightshttps://github.com/solutions/executive-insights
Trust Centerhttps://github.com/trust-center
GitHub Advanced SecurityEnterprise-grade code securityhttps://github.com/security/advanced-security
Copilot for businessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Documentationhttps://docs.github.com/en
Resource centerhttps://github.com/resources
Bloghttps://github.blog/
Events & webinarshttps://github.com/resources/events
Community Forumhttps://github.com/orgs/community/discussions
Customer Storieshttps://github.com/customer-stories
Integrationshttps://github.com/marketplace
Customer supporthttps://help.github.com/
Traininghttps://learn.github.com/skills
GitHub Statushttps://www.githubstatus.com/
Abouthttps://github.com/about
Partnershttps://github.com/partners
Changeloghttps://github.blog/changelog/
GitHub UniverseThe event for developers, by developers — talks, workshops, and what’s next for GitHub.https://githubuniverse.com/
Pricinghttps://github.com/pricing
Sign inhttps://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Foperator-framework%2Fjava-operator-sdk%2Fpull%2F3513%2Ffiles
Sign uphttps://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=operator-framework%2Fjava-operator-sdk
Reloadhttps://github.com/operator-framework/java-operator-sdk/pull/3513/files
Reloadhttps://github.com/operator-framework/java-operator-sdk/pull/3513/files
Reloadhttps://github.com/operator-framework/java-operator-sdk/pull/3513/files
operator-frameworkhttps://github.com/operator-framework
java-operator-sdkhttps://github.com/operator-framework/java-operator-sdk
Codehttps://github.com/operator-framework/java-operator-sdk
Issues49 (49)https://github.com/operator-framework/java-operator-sdk/issues
Pull requests11 (11)https://github.com/operator-framework/java-operator-sdk/pulls
Discussionshttps://github.com/operator-framework/java-operator-sdk/discussions
Actionshttps://github.com/operator-framework/java-operator-sdk/actions
Projectshttps://github.com/operator-framework/java-operator-sdk/projects
Security and qualityhttps://github.com/operator-framework/java-operator-sdk/security
Insightshttps://github.com/operator-framework/java-operator-sdk/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Foperator-framework%2Fjava-operator-sdk%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Foperator-framework%2Fjava-operator-sdk%2Fissues%2Fnew%2Fchoose
csvirihttps://github.com/csviri
operator-framework:mainhttps://github.com/operator-framework/java-operator-sdk/tree/main
exijn:feature/2967-kotlin-verificationhttps://github.com/exijn/java-operator-sdk/tree/feature/2967-kotlin-verification
Conversation 12 https://github.com/operator-framework/java-operator-sdk/pull/3513
Commits 4 https://github.com/operator-framework/java-operator-sdk/pull/3513/commits
Checks 28 https://github.com/operator-framework/java-operator-sdk/pull/3513/checks
Files changed https://github.com/operator-framework/java-operator-sdk/pull/3513/files
Please reload this pagehttps://github.com/operator-framework/java-operator-sdk/pull/3513/files
test: verify Kotlin interop with a unit test and a Kotlin sample operator E2E test https://github.com/operator-framework/java-operator-sdk/pull/3513/files#top
Show all changes 4 commits https://github.com/operator-framework/java-operator-sdk/pull/3513/files
9118afd test: add Kotlin smoke test for checked exception handling exijn Jul 25, 2026 https://github.com/operator-framework/java-operator-sdk/pull/3513/commits/9118afd30a36efba73cb1e4c96f37b117c64a95b
65dc96f Potential fix for pull request finding exijn Jul 26, 2026 https://github.com/operator-framework/java-operator-sdk/pull/3513/commits/65dc96f0c7272e82264d2d3cef27fdbcc28034e2
8d0fecb fix: close class brace in Kotlin test; add Kotlin sample operator E2E exijn Jul 28, 2026 https://github.com/operator-framework/java-operator-sdk/pull/3513/commits/8d0fecb38f5966bc2b8f838225af920ef990e627
d375dba fix: address Copilot review on kotlin-operator sample exijn Jul 28, 2026 https://github.com/operator-framework/java-operator-sdk/pull/3513/commits/d375dbae6002311315ec202e36c6c73fbece8e40
Clear filters https://github.com/operator-framework/java-operator-sdk/pull/3513/files
Please reload this pagehttps://github.com/operator-framework/java-operator-sdk/pull/3513/files
Please reload this pagehttps://github.com/operator-framework/java-operator-sdk/pull/3513/files
e2e-test.yml https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-5cc2c864012004f60ee3f9078fa1c4a8721c6b841e386c57f12bea58b692e6e2
pom.xml https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-2ad2267ea83877ecf6f99e5948c8a50360af4d7ef4a54dd42819d136730c51ae
KotlinCheckedExceptionDependentResourceTest.kt https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-1fe2a0ba05f25476b77026b5c62d6f4d992e0de710b8dc7eb460783968d19cd8
README.md https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-aa7a32b157cf4520bec6015e32942d2958831715fa9270ff99ae0e8e9c431c1b
operator.yaml https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-1e9d045ac74c6ff066674371309f76b90e8d75f03d226d3c0d0879040ec15a5a
pom.xml https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-65834b1e5e3789a63c47e1ad20bce72c4ee1efc0973f3529450979642d48dfa1
ConfigMapCopy.kt https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-a4ef3f83d9638f7d4e83008de995cc526d87c9adfda5963254ef8448c7789127
ConfigMapCopyOperator.kt https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-c1437705b0526989fd3304550a56c0043d2a6e8af5e7bedf8cf274a776bced33
ConfigMapCopyReconciler.kt https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-0e3e40448dcee31ed194c1cce0814b3793c01879e47e7fe1ecddf5bd2be1de8d
ConfigMapCopySpec.kt https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-4ee3eb36e901380d0103d978e1520ffede80c7fa8ae8b75dff5bd0811ff7e040
ConfigMapCopyStatus.kt https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-122230df91f7ad17483119e41a881394f05cfc7fb66e6f443fafdc376cbbf2d6
log4j2.xml https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-7a7043b78bbace4e7eb93cd2169afd5ab4c770082a8822e28ba2654396e09a61
ConfigMapCopyE2E.kt https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-0cb5cf7302a89232f745c5b5c1278b0d7238840fca3bc2ce6aaae41918599e10
log4j2.xml https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-49444e7f4adbe1ab828ab86b64db4b0930a49904548e1aa4faf1922216ef6154
pom.xml https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-be3151827d098af5991177cd9f26ce587e8850cd5c04ed1f19391c7e8095ba60
.github/workflows/e2e-test.ymlhttps://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-5cc2c864012004f60ee3f9078fa1c4a8721c6b841e386c57f12bea58b692e6e2
View file https://github.com/exijn/java-operator-sdk/blob/d375dbae6002311315ec202e36c6c73fbece8e40/.github/workflows/e2e-test.yml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/operator-framework/java-operator-sdk/pull/3513/{{ revealButtonHref }}
https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-5cc2c864012004f60ee3f9078fa1c4a8721c6b841e386c57f12bea58b692e6e2
https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-5cc2c864012004f60ee3f9078fa1c4a8721c6b841e386c57f12bea58b692e6e2
operator-framework-core/pom.xmlhttps://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-2ad2267ea83877ecf6f99e5948c8a50360af4d7ef4a54dd42819d136730c51ae
View file https://github.com/exijn/java-operator-sdk/blob/d375dbae6002311315ec202e36c6c73fbece8e40/operator-framework-core/pom.xml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/operator-framework/java-operator-sdk/pull/3513/{{ revealButtonHref }}
https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-2ad2267ea83877ecf6f99e5948c8a50360af4d7ef4a54dd42819d136730c51ae
https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-2ad2267ea83877ecf6f99e5948c8a50360af4d7ef4a54dd42819d136730c51ae
https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-2ad2267ea83877ecf6f99e5948c8a50360af4d7ef4a54dd42819d136730c51ae
https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-2ad2267ea83877ecf6f99e5948c8a50360af4d7ef4a54dd42819d136730c51ae
https://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-2ad2267ea83877ecf6f99e5948c8a50360af4d7ef4a54dd42819d136730c51ae
...sdk/operator/processing/dependent/workflow/KotlinCheckedExceptionDependentResourceTest.kthttps://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-1fe2a0ba05f25476b77026b5c62d6f4d992e0de710b8dc7eb460783968d19cd8
View file https://github.com/exijn/java-operator-sdk/blob/d375dbae6002311315ec202e36c6c73fbece8e40/operator-framework-core/src/test/kotlin/io/javaoperatorsdk/operator/processing/dependent/workflow/KotlinCheckedExceptionDependentResourceTest.kt
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/operator-framework/java-operator-sdk/pull/3513/{{ revealButtonHref }}
sample-operators/kotlin-operator/README.mdhttps://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-aa7a32b157cf4520bec6015e32942d2958831715fa9270ff99ae0e8e9c431c1b
View file https://github.com/exijn/java-operator-sdk/blob/d375dbae6002311315ec202e36c6c73fbece8e40/sample-operators/kotlin-operator/README.md
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/operator-framework/java-operator-sdk/pull/3513/{{ revealButtonHref }}
sample-operators/kotlin-operator/k8s/operator.yamlhttps://github.com/operator-framework/java-operator-sdk/pull/3513/files#diff-1e9d045ac74c6ff066674371309f76b90e8d75f03d226d3c0d0879040ec15a5a
View file https://github.com/exijn/java-operator-sdk/blob/d375dbae6002311315ec202e36c6c73fbece8e40/sample-operators/kotlin-operator/k8s/operator.yaml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/operator-framework/java-operator-sdk/pull/3513/{{ revealButtonHref }}
Please reload this pagehttps://github.com/operator-framework/java-operator-sdk/pull/3513/files
Please reload this pagehttps://github.com/operator-framework/java-operator-sdk/pull/3513/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.