From 243eb0f165761b9643ff97695bf91c90562e53f4 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Wed, 27 Mar 2024 11:32:56 +0300 Subject: [PATCH 01/22] Add IT test --- .github/workflows/build.yml | 10 + .../legal-notices/THIRDPARTYREADME.txt | 652 ------------------ README.md | 1 - 3 files changed, 10 insertions(+), 653 deletions(-) delete mode 100644 OpenICF-java-framework/openicf-zip/src/main/resources/legal-notices/THIRDPARTYREADME.txt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 48b07f90..8a5c2b1b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -33,6 +33,16 @@ jobs: env: MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10 run: mvn --batch-mode --errors --update-snapshots verify --file pom.xml + - name: Test on Unix + if: runner.os != 'Windows' + run: | + unzip OpenICF-java-framework/openicf-zip/target/openicf-*.zip + openicf/bin/ConnectorServer.sh + - name: Test on Windows + if: runner.os == 'Windows' + run: | + unzip OpenICF-java-framework\openicf-zip\target\openicf-*.zip + openicf\bin\ConnectorServer.bat - name: Upload failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() }} diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/legal-notices/THIRDPARTYREADME.txt b/OpenICF-java-framework/openicf-zip/src/main/resources/legal-notices/THIRDPARTYREADME.txt deleted file mode 100644 index 7b10358a..00000000 --- a/OpenICF-java-framework/openicf-zip/src/main/resources/legal-notices/THIRDPARTYREADME.txt +++ /dev/null @@ -1,652 +0,0 @@ -DO NOT TRANSLATE OR LOCALIZE - - -*************************************************************************** -Apache Software License, Version 2.0 -*************************************************************************** - -Version: org.codehaus.groovy:groovy-all:${groovy.version} -Copyright: Copyright 2003-2014 The respective authors and developers. Developers and Contributors are listed in the project POM file and Gradle build file. - -================== -Full license text: -================== - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and -You must cause any modified files to carry prominent notices stating that You changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - -You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work -To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - - -*************************************************************************** -Eclipse Public License - v 1.0 -*************************************************************************** - -Version: ch.qos.logback:logback-classic:${logback.version} -Copyright: Copyright (C) 1999-2012, QOS.ch. All rights reserved. - -Version: ch.qos.logback:logback-core:${logback.version} -Copyright: Copyright (C) 1999-2012, QOS.ch. All rights reserved. - -================== -Full license text: -================== - -Eclipse Public License - v 1.0 - -THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. - -1. DEFINITIONS - -"Contribution" means: - -a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and -b) in the case of each subsequent Contributor: -i) changes to the Program, and -ii) additions to the Program; -where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program. -"Contributor" means any person or entity that distributes the Program. - -"Licensed Patents" mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program. - -"Program" means the Contributions distributed in accordance with this Agreement. - -"Recipient" means anyone who receives the Program under this Agreement, including all Contributors. - -2. GRANT OF RIGHTS - -a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form. -b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder. -c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program. -d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement. -3. REQUIREMENTS - -A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that: - -a) it complies with the terms and conditions of this Agreement; and -b) its license agreement: -i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose; -ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits; -iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and -iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange. -When the Program is made available in source code form: - -a) it must be made available under this Agreement; and -b) a copy of this Agreement must be included with each copy of the Program. -Contributors may not remove or alter any copyright notices contained within the Program. - -Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution. - -4. COMMERCIAL DISTRIBUTION - -Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense. - -For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages. - -5. NO WARRANTY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations. - -6. DISCLAIMER OF LIABILITY - -EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. GENERAL - -If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - -If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed. - -All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive. - -Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. - -This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation. - - -*************************************************************************** -The MIT License -*************************************************************************** - -Version: org.slf4j:slf4j-api:${slf4j.version} -Copyright: Copyright (c) 2004-2013 QOS.ch - -Version: org.bouncycastle:bcprov-jdk18on:1.77 -Copyright: Copyright (c) 2000 - 2015 The Legion of the Bouncy Castle Inc. (http://www.bouncycastle.org) - -================== -Full license text: -================== - - Copyright (c) 2004-2013 QOS.ch - All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -*************************************************************************** -BSD 2-clause “Simplified” License -*************************************************************************** - -Version: com.google.protobuf:protobuf-java:${protobuf-java.version} -Copyright: Copyright 2014, Google Inc. All rights reserved. - -================== -Full license text: -================== - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Code generated by the Protocol Buffer compiler is owned by the owner -of the input file used when generating it. This code is not -standalone and requires a support library to be linked with it. This -support library is itself covered by the above license. - -*************************************************************************** -The CDDL License -*************************************************************************** - -Version: org.glassfish.grizzly:grizzly-framework:${grizzly.version} -Copyright: Copyright (c) 2007-2015 Oracle and/or its affiliates. All rights reserved. - -Version: org.glassfish.grizzly:grizzly-http-server:${grizzly.version} -Copyright: Copyright (c) 2007-2015 Oracle and/or its affiliates. All rights reserved. - -Version: org.glassfish.grizzly:grizzly-http-servlet:${grizzly.version} -Copyright: Copyright (c) 2007-2015 Oracle and/or its affiliates. All rights reserved. - -Version: org.glassfish.grizzly:grizzly-http:${grizzly.version} -Copyright: Copyright (c) 2007-2015 Oracle and/or its affiliates. All rights reserved. - -Version: org.glassfish.grizzly:grizzly-websockets:${grizzly.version} -Copyright: Copyright (c) 2007-2015 Oracle and/or its affiliates. All rights reserved. - -Version: javax.servlet:javax.servlet-api:3.0.1 -Copyright: Copyright (c) 1997-2011 Oracle and/or its affiliates. All rights reserved. - -================== -Full license text: -================== -COMMON DEVELOPMENT AND DISTRIBUTION LICENSE Version 1.0 - -1. Definitions. - - 1.1. "Contributor" means each individual or entity that creates - or contributes to the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original - Software, prior Modifications used by a Contributor (if any), - and the Modifications made by that particular Contributor. - - 1.3. "Covered Software" means (a) the Original Software, or (b) - Modifications, or (c) the combination of files containing - Original Software with files containing Modifications, in - each case including portions thereof. - - 1.4. "Executable" means the Covered Software in any form other - than Source Code. - - 1.5. "Initial Developer" means the individual or entity that first - makes Original Software available under this License. - - 1.6. "Larger Work" means a work which combines Covered Software or - portions thereof with code not governed by the terms of this - License. - - 1.7. "License" means this document. - - 1.8. "Licensable" means having the right to grant, to the maximum - extent possible, whether at the time of the initial grant or - subsequently acquired, any and all of the rights conveyed - herein. - - 1.9. "Modifications" means the Source Code and Executable form of - any of the following: - - A. Any file that results from an addition to, deletion from or - modification of the contents of a file containing Original - Software or previous Modifications; - - B. Any new file that contains any part of the Original - Software or previous Modifications; or - - C. Any new file that is contributed or otherwise made - available under the terms of this License. - - 1.10. "Original Software" means the Source Code and Executable - form of computer software code that is originally released - under this License. - - 1.11. "Patent Claims" means any patent claim(s), now owned or - hereafter acquired, including without limitation, method, - process, and apparatus claims, in any patent Licensable by - grantor. - - 1.12. "Source Code" means (a) the common form of computer software - code in which modifications are made and (b) associated - documentation included in or with such code. - - 1.13. "You" (or "Your") means an individual or a legal entity - exercising rights under, and complying with all of the terms - of, this License. For legal entities, "You" includes any - entity which controls, is controlled by, or is under common - control with You. For purposes of this definition, - "control" means (a) the power, direct or indirect, to cause - the direction or management of such entity, whether by - contract or otherwise, or (b) ownership of more than fifty - percent (50%) of the outstanding shares or beneficial - ownership of such entity. - -2. License Grants. - - 2.1. The Initial Developer Grant. - - Conditioned upon Your compliance with Section 3.1 below and - subject to third party intellectual property claims, the Initial - Developer hereby grants You a world-wide, royalty-free, - non-exclusive license: - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Initial Developer, to use, - reproduce, modify, display, perform, sublicense and - distribute the Original Software (or portions thereof), - with or without Modifications, and/or as part of a Larger - Work; and - - (b) under Patent Claims infringed by the making, using or - selling of Original Software, to make, have made, use, - practice, sell, and offer for sale, and/or otherwise - dispose of the Original Software (or portions thereof). - - (c) The licenses granted in Sections 2.1(a) and (b) are - effective on the date Initial Developer first distributes - or otherwise makes the Original Software available to a - third party under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is - granted: (1) for code that You delete from the Original - Software, or (2) for infringements caused by: (i) the - modification of the Original Software, or (ii) the - combination of the Original Software with other software - or devices. - - 2.2. Contributor Grant. - - Conditioned upon Your compliance with Section 3.1 below and - subject to third party intellectual property claims, each - Contributor hereby grants You a world-wide, royalty-free, - non-exclusive license: - - (a) under intellectual property rights (other than patent or - trademark) Licensable by Contributor to use, reproduce, - modify, display, perform, sublicense and distribute the - Modifications created by such Contributor (or portions - thereof), either on an unmodified basis, with other - Modifications, as Covered Software and/or as part of a - Larger Work; and - - (b) under Patent Claims infringed by the making, using, or - selling of Modifications made by that Contributor either - alone and/or in combination with its Contributor Version - (or portions of such combination), to make, use, sell, - offer for sale, have made, and/or otherwise dispose of: - (1) Modifications made by that Contributor (or portions - thereof); and (2) the combination of Modifications made by - that Contributor with its Contributor Version (or portions - of such combination). - - (c) The licenses granted in Sections 2.2(a) and 2.2(b) are - effective on the date Contributor first distributes or - otherwise makes the Modifications available to a third - party. - - (d) Notwithstanding Section 2.2(b) above, no patent license is - granted: (1) for any code that Contributor has deleted - from the Contributor Version; (2) for infringements caused - by: (i) third party modifications of Contributor Version, - or (ii) the combination of Modifications made by that - Contributor with other software (except as part of the - Contributor Version) or other devices; or (3) under Patent - Claims infringed by Covered Software in the absence of - Modifications made by that Contributor. - -3. Distribution Obligations. - - 3.1. Availability of Source Code. - - Any Covered Software that You distribute or otherwise make - available in Executable form must also be made available in Source - Code form and that Source Code form must be distributed only under - the terms of this License. You must include a copy of this - License with every copy of the Source Code form of the Covered - Software You distribute or otherwise make available. You must - inform recipients of any such Covered Software in Executable form - as to how they can obtain such Covered Software in Source Code - form in a reasonable manner on or through a medium customarily - used for software exchange. - - 3.2. Modifications. - - The Modifications that You create or to which You contribute are - governed by the terms of this License. You represent that You - believe Your Modifications are Your original creation(s) and/or - You have sufficient rights to grant the rights conveyed by this - License. - - 3.3. Required Notices. - - You must include a notice in each of Your Modifications that - identifies You as the Contributor of the Modification. You may - not remove or alter any copyright, patent or trademark notices - contained within the Covered Software, or any notices of licensing - or any descriptive text giving attribution to any Contributor or - the Initial Developer. - - 3.4. Application of Additional Terms. - - You may not offer or impose any terms on any Covered Software in - Source Code form that alters or restricts the applicable version - of this License or the recipients' rights hereunder. You may - choose to offer, and to charge a fee for, warranty, support, - indemnity or liability obligations to one or more recipients of - Covered Software. However, you may do so only on Your own behalf, - and not on behalf of the Initial Developer or any Contributor. - You must make it absolutely clear that any such warranty, support, - indemnity or liability obligation is offered by You alone, and You - hereby agree to indemnify the Initial Developer and every - Contributor for any liability incurred by the Initial Developer or - such Contributor as a result of warranty, support, indemnity or - liability terms You offer. - - 3.5. Distribution of Executable Versions. - - You may distribute the Executable form of the Covered Software - under the terms of this License or under the terms of a license of - Your choice, which may contain terms different from this License, - provided that You are in compliance with the terms of this License - and that the license for the Executable form does not attempt to - limit or alter the recipient's rights in the Source Code form from - the rights set forth in this License. If You distribute the - Covered Software in Executable form under a different license, You - must make it absolutely clear that any terms which differ from - this License are offered by You alone, not by the Initial - Developer or Contributor. You hereby agree to indemnify the - Initial Developer and every Contributor for any liability incurred - by the Initial Developer or such Contributor as a result of any - such terms You offer. - - 3.6. Larger Works. - - You may create a Larger Work by combining Covered Software with - other code not governed by the terms of this License and - distribute the Larger Work as a single product. In such a case, - You must make sure the requirements of this License are fulfilled - for the Covered Software. - -4. Versions of the License. - - 4.1. New Versions. - - Sun Microsystems, Inc. is the initial license steward and may - publish revised and/or new versions of this License from time to - time. Each version will be given a distinguishing version number. - Except as provided in Section 4.3, no one other than the license - steward has the right to modify this License. - - 4.2. Effect of New Versions. - - You may always continue to use, distribute or otherwise make the - Covered Software available under the terms of the version of the - License under which You originally received the Covered Software. - If the Initial Developer includes a notice in the Original - Software prohibiting it from being distributed or otherwise made - available under any subsequent version of the License, You must - distribute and make the Covered Software available under the terms - of the version of the License under which You originally received - the Covered Software. Otherwise, You may also choose to use, - distribute or otherwise make the Covered Software available under - the terms of any subsequent version of the License published by - the license steward. - - 4.3. Modified Versions. - - When You are an Initial Developer and You want to create a new - license for Your Original Software, You may create and use a - modified version of this License if You: (a) rename the license - and remove any references to the name of the license steward - (except to note that the license differs from this License); and - (b) otherwise make it clear that the license contains terms which - differ from this License. - -5. DISCLAIMER OF WARRANTY. - - COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" - BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, - INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED - SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR - PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND - PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY - COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE - INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY - NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF - WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF - ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS - DISCLAIMER. - -6. TERMINATION. - - 6.1. This License and the rights granted hereunder will terminate - automatically if You fail to comply with terms herein and fail to - cure such breach within 30 days of becoming aware of the breach. - Provisions which, by their nature, must remain in effect beyond - the termination of this License shall survive. - - 6.2. If You assert a patent infringement claim (excluding - declaratory judgment actions) against Initial Developer or a - Contributor (the Initial Developer or Contributor against whom You - assert such claim is referred to as "Participant") alleging that - the Participant Software (meaning the Contributor Version where - the Participant is a Contributor or the Original Software where - the Participant is the Initial Developer) directly or indirectly - infringes any patent, then any and all rights granted directly or - indirectly to You by such Participant, the Initial Developer (if - the Initial Developer is not the Participant) and all Contributors - under Sections 2.1 and/or 2.2 of this License shall, upon 60 days - notice from Participant terminate prospectively and automatically - at the expiration of such 60 day notice period, unless if within - such 60 day period You withdraw Your claim with respect to the - Participant Software against such Participant either unilaterally - or pursuant to a written agreement with Participant. - - 6.3. In the event of termination under Sections 6.1 or 6.2 above, - all end user licenses that have been validly granted by You or any - distributor hereunder prior to termination (excluding licenses - granted to You by any distributor) shall survive termination. - -7. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT - (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE - INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF - COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE - LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR - CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT - LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK - STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER - COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN - INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF - LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL - INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT - APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO - NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR - CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT - APPLY TO YOU. - -8. U.S. GOVERNMENT END USERS. - - The Covered Software is a "commercial item," as that term is - defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial - computer software" (as that term is defined at 48 - C.F.R. 252.227-7014(a)(1)) and "commercial computer software - documentation" as such terms are used in 48 C.F.R. 12.212 - (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 - C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all - U.S. Government End Users acquire Covered Software with only those - rights set forth herein. This U.S. Government Rights clause is in - lieu of, and supersedes, any other FAR, DFAR, or other clause or - provision that addresses Government rights in computer software - under this License. - -9. MISCELLANEOUS. - - This License represents the complete agreement concerning subject - matter hereof. If any provision of this License is held to be - unenforceable, such provision shall be reformed only to the extent - necessary to make it enforceable. This License shall be governed - by the law of the jurisdiction specified in a notice contained - within the Original Software (except to the extent applicable law, - if any, provides otherwise), excluding such jurisdiction's - conflict-of-law provisions. Any litigation relating to this - License shall be subject to the jurisdiction of the courts located - in the jurisdiction and venue specified in a notice contained - within the Original Software, with the losing party responsible - for costs, including, without limitation, court costs and - reasonable attorneys' fees and expenses. The application of the - United Nations Convention on Contracts for the International Sale - of Goods is expressly excluded. Any law or regulation which - provides that the language of a contract shall be construed - against the drafter shall not apply to this License. You agree - that You alone are responsible for compliance with the United - States export administration regulations (and the export control - laws and regulation of any other countries) when You use, - distribute or otherwise make available any Covered Software. - -10. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is - responsible for claims and damages arising, directly or - indirectly, out of its utilization of rights under this License - and You agree to work with Initial Developer and Contributors to - distribute such responsibility on an equitable basis. Nothing - herein is intended or shall be deemed to constitute any admission - of liability. - --------------------------------------------------------------------- - -NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND -DISTRIBUTION LICENSE (CDDL) - -For Covered Software in this distribution, this License shall -be governed by the laws of the State of California (excluding -conflict-of-law provisions). - -Any litigation relating to this License shall be subject to the -jurisdiction of the Federal Courts of the Northern District of -California and the state courts of the State of California, with -venue lying in Santa Clara County, California. \ No newline at end of file diff --git a/README.md b/README.md index 4c3e0946..8cb68640 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,6 @@ mvn install -f OpenICF ## How-to run after build ```bash unzip OpenICF-java-framework/openicf-zip/target/openicf-*.zip -openicf/bin/openicf.sh start openicf/bin/ConnectorServer.sh /run ``` From c4e288fb792d8819b0706133271547729511dcfb Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Wed, 27 Mar 2024 11:48:55 +0300 Subject: [PATCH 02/22] Add IT test --- OpenICF-java-framework/.gitignore | 126 ----------- .../common/rpc/RequestDistributorTest.java | 1 + .../main/resources/bin/ConnectorServer.bat | 205 ++++++++++++++++++ .../src/main/resources/bin/ConnectorServer.sh | 170 +++++++++++++++ .../src/main/resources/bin/MonitorService.bat | 2 + .../bin/amd64/ConnectorServerJava.exe | Bin 0 -> 103936 bytes .../bin/i386/ConnectorServerJava.exe | Bin 0 -> 80896 bytes .../bin/ia64/ConnectorServerJava.exe | Bin 0 -> 208896 bytes .../src/main/resources/bin/openicf.sh | 119 ++++++++++ .../src/main/resources/bin/prunmgr.exe | Bin 0 -> 104448 bytes 10 files changed, 497 insertions(+), 126 deletions(-) delete mode 100644 OpenICF-java-framework/.gitignore create mode 100755 OpenICF-java-framework/openicf-zip/src/main/resources/bin/ConnectorServer.bat create mode 100644 OpenICF-java-framework/openicf-zip/src/main/resources/bin/ConnectorServer.sh create mode 100644 OpenICF-java-framework/openicf-zip/src/main/resources/bin/MonitorService.bat create mode 100755 OpenICF-java-framework/openicf-zip/src/main/resources/bin/amd64/ConnectorServerJava.exe create mode 100755 OpenICF-java-framework/openicf-zip/src/main/resources/bin/i386/ConnectorServerJava.exe create mode 100755 OpenICF-java-framework/openicf-zip/src/main/resources/bin/ia64/ConnectorServerJava.exe create mode 100644 OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh create mode 100755 OpenICF-java-framework/openicf-zip/src/main/resources/bin/prunmgr.exe diff --git a/OpenICF-java-framework/.gitignore b/OpenICF-java-framework/.gitignore deleted file mode 100644 index 9c64d946..00000000 --- a/OpenICF-java-framework/.gitignore +++ /dev/null @@ -1,126 +0,0 @@ -### JetBrains template -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio - -*.iml - -## Directory-based project format: -.idea/ -# if you remove the above rule, at least ignore the following: - -# User-specific stuff: -# .idea/workspace.xml -# .idea/tasks.xml -# .idea/dictionaries - -# Sensitive or high-churn files: -# .idea/dataSources.ids -# .idea/dataSources.xml -# .idea/sqlDataSources.xml -# .idea/dynamic.xml -# .idea/uiDesigner.xml - -# Gradle: -# .idea/gradle.xml -# .idea/libraries - -# Mongo Explorer plugin: -# .idea/mongoSettings.xml - -## File-based project format: -*.ipr -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Clover plugin -.clover/ - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -### NetBeans template -nbproject/private/ -build/ -nbbuild/ -dist/ -nbdist/ -nbactions.xml -nb-configuration.xml -.nb-gradle/ -### Maven template -target/ -pom.xml.tag -pom.xml.releaseBackup -pom.xml.versionsBackup -pom.xml.next -release.properties -dependency-reduced-pom.xml -buildNumber.properties -.mvn/timing.properties - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* -### Eclipse template -*.pydevproject -.metadata -.gradle -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.settings/ -.loadpath - -# Eclipse Core -.project - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# JDT-specific (Eclipse Java Development Tools) -.classpath - -# Java annotation processor (APT) -.factorypath - -# PDT-specific -.buildpath - -# sbteclipse plugin -.target - -# TeXlipse plugin -.texlipse - -# Created by .ignore support plugin (hsz.mobi) - -target.db - -test-output \ No newline at end of file diff --git a/OpenICF-java-framework/connector-framework-rpc/src/test/java/org/forgerock/openicf/common/rpc/RequestDistributorTest.java b/OpenICF-java-framework/connector-framework-rpc/src/test/java/org/forgerock/openicf/common/rpc/RequestDistributorTest.java index ba156bfa..3b31cfc2 100644 --- a/OpenICF-java-framework/connector-framework-rpc/src/test/java/org/forgerock/openicf/common/rpc/RequestDistributorTest.java +++ b/OpenICF-java-framework/connector-framework-rpc/src/test/java/org/forgerock/openicf/common/rpc/RequestDistributorTest.java @@ -147,6 +147,7 @@ public void testSimpleRequest() throws Exception { Assert.assertEquals(request.getPromise() .getOrThrowUninterruptibly(5, TimeUnit.SECONDS), "OK"); + Thread.sleep(3000); // Wait to complete all other threads Assert.assertTrue(client.getRemoteRequests().isEmpty()); Assert.assertTrue(server.getLocalRequests().isEmpty()); } finally { diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/ConnectorServer.bat b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/ConnectorServer.bat new file mode 100755 index 00000000..965e1fe8 --- /dev/null +++ b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/ConnectorServer.bat @@ -0,0 +1,205 @@ +@echo off +rem -- START LICENSE +rem ==================== +rem DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. +rem +rem Copyright 2008-2009 Sun Microsystems, Inc. All rights reserved. +rem +rem The contents of this file are subject to the terms of the Common Development +rem and Distribution License("CDDL") (the "License"). You may not use this file +rem except in compliance with the License. +rem +rem You can obtain a copy of the License at +rem http://opensource.org/licenses/cddl1.php +rem See the License for the specific language governing permissions and limitations +rem under the License. +rem +rem When distributing the Covered Code, include this CDDL Header Notice in each file +rem and include the License file at http://opensource.org/licenses/cddl1.php. +rem If applicable, add the following below this CDDL Header, with the fields +rem enclosed by brackets [] replaced by your own identifying information: +rem "Portions Copyrighted [year] [name of copyright owner]" +rem ==================== +rem +rem Portions Copyrighted 2012-2014 ForgeRock AS +rem +rem -- END LICENSE + +SETLOCAL ENABLEDELAYEDEXPANSION + +rem Set Connector Server Home +set CURRENT_DIR=%cd% +cd /d %0\.. +set SCRIPT_DIR=%cd% +cd .. +if not "%CONNECTOR_SERVER_HOME%" == "" goto homeSet +set CONNECTOR_SERVER_HOME=%cd% +:homeSet +cd "%CURRENT_DIR%"" +if exist "%CONNECTOR_SERVER_HOME%\bin\ConnectorServer.bat" goto homeOk +echo Invalid CONNECTOR_SERVER_HOME environment variable +echo Please set it to correct Connector Server Home +:homeOk + +rem Check Java availability +if not "%JAVA_HOME%" == "" goto checkJavaHome +if not "%JRE_HOME%" == "" goto checkJavaHome +echo JAVA_HOME or JRE_HOME not available, Java is needed to run the Connector Server +echo Please install Java and set the JAVA_HOME accordingly +goto exit +:checkJavaHome +if exist "%JAVA_HOME%\bin\java.exe" goto javaHomeOk +if exist "%JRE_HOME%\bin\java.exe" goto jreHomeOk +echo Incorrect JAVA_HOME or JRE_HOME +goto exit +:jreHomeOk +set JAVA="%JRE_HOME%\bin\java.exe" +set JAVA_DLL="%JRE_HOME%\bin\server\jvm.dll" +goto homeOk +:javaHomeOk +set JAVA="%JAVA_HOME%\bin\java.exe" +set JAVA_DLL="%JAVA_HOME%\jre\bin\server\jvm.dll" +:homeOk + +rem SET MISC PROPERTIES +rem Architecture, can be i386 or amd64 or ia64 (it is basically the directory name +rem where the binaries are stored, if not set this script will try to +rem find the value automatically based on environment variables) +set ARCH= +rem find out the architecture +if ""%ARCH%"" == """" ( + set ARCH=i386 + if ""%PROCESSOR_ARCHITECTURE%"" == ""AMD64"" set ARCH=amd64 + if ""%PROCESSOR_ARCHITECTURE%"" == ""IA64"" set ARCH=ia64 +) + +for /f tokens^=2-5^ delims^=.-_^" %%j in ('%JAVA% -fullversion 2^>^&1') do set "java_version=%%j%%k" +rem Set CLASSPATH for starting connector server +rem Only Java 6 and above supports wildcard (*) +set CP="lib\framework\*;lib\framework" + +set MAIN_CLASS=org.forgerock.openicf.framework.server.Main + +if %java_version% LSS 16 ( + rem setup the classpath + set CP=lib\framework\connector-framework.jar + set CP=!CP!;lib\framework\connector-framework-internal.jar + set CP=!CP!;lib\framework\groovy-all.jar + set CP=!CP!;lib\framework\icfl-over-slf4j.jar + set CP=!CP!;lib\framework\slf4j-api.jar + set CP=!CP!;lib\framework\logback-core.jar + set CP=!CP!;lib\framework\logback-classic.jar + set CP=!CP!;lib\framework + rem Start the 32bit binary with Java 5 + set ARCH=i386 + set MAIN_CLASS=org.identityconnectors.framework.server.Main +) + +rem Run java options, separated by space +set JAVA_OPTS=-Xmx500m + +rem Service java options, needs to be separated by ; +set JAVA_OPTS_SERVICE=-Xmx512m; +rem Enable SSL +rem set JAVA_OPTS_SERVICE=-Xmx500m;-Djavax.net.ssl.keyStore=conf\keystore.jks;-Djavax.net.ssl.keyStorePassword=changeit; +set SERVER_PROPERTIES="conf\ConnectorServer.properties" +set JVM_OPTION_IDENTIFIER=-J + +if ""%1"" == ""jpda"" ( + if ""%JPDA_TRANSPORT%"" == """" set JPDA_TRANSPORT="dt_socket" + if ""%JPDA_ADDRESS%"" == """" set JPDA_ADDRESS="5005" + if ""%JPDA_SUSPEND%"" == """" set JPDA_SUSPEND="y" + if ""%JPDA_OPTS%"" == """" set JPDA_OPTS="-agentlib:jdwp=transport=!JPDA_TRANSPORT!,address=!JPDA_ADDRESS!,server=y,suspend=!JPDA_SUSPEND!" + set JAVA_OPTS=!JAVA_OPTS! !JPDA_OPTS! + shift +) + +if /i ""%1"" == ""/run"" goto srvRun +if /i ""%1"" == ""/setKey"" goto srvSetKey +if /i ""%1"" == ""/setDefaults"" goto srvSetDefaults +if /i ""%1"" == ""/install"" goto srvInstall +if /i ""%1"" == ""/uninstall"" goto srvUninstall + +echo Usage: ConnectorServer ^ ^[option^], where command is one of the following: +echo /install ^[^^] ^["-J"^] - Installs the service. +echo /uninstall ^[^^] - Uninstalls the service. +echo /run ^["-J"^] - Runs the server from the console. +echo /setKey ^[^^] - Sets the connector server key. +echo /setDefaults - Sets the default ConnectorServer.properties. +echo. +echo example: +echo ConnectorServer.bat /run "-J-Djavax.net.ssl.keyStore=mykeystore.jks" "-J-Djavax.net.ssl.keyStorePassword=changeit" +echo - this will run connector server with SSL +echo. +echo ConnectorServer.bat jpda /run +echo - this will run connector server in debug mode +goto :EOF + +:srvRun +rem Run the server main class +shift +set JAVA_OPTS_PARAM= +set JAVA_OPTS_DELIM= +for %%P in (%*) do ( + set T=%%P + if "!T:~1,2!" == "%JVM_OPTION_IDENTIFIER%" ( + set JAVA_OPTS_PARAM=!JAVA_OPTS_PARAM!!JAVA_OPTS_DELIM!!T:~3,-1! + set JAVA_OPTS_DELIM= + ) +) +cd "%CONNECTOR_SERVER_HOME%" + +%JAVA% %JAVA_OPTS% %JAVA_OPTS_PARAM% -server -classpath %CP% %MAIN_CLASS% -run -properties %SERVER_PROPERTIES% +cd "%CURRENT_DIR%" +goto :EOF + +:srvSetKey +rem Sets key in the Identity Connectors Server properties file +if not ""%2"" == """" ( + %JAVA% %JAVA_OPTS% -classpath %CP% %MAIN_CLASS% -setKey -key %2 -properties %SERVER_PROPERTIES% + goto :EOF +) +%JAVA% %JAVA_OPTS% -classpath %CP% %MAIN_CLASS% -setKey -properties %SERVER_PROPERTIES% +goto :EOF + +:srvSetDefaults +%JAVA% %JAVA_OPTS% -classpath %CP% %MAIN_CLASS% -setDefaults -properties %SERVER_PROPERTIES% +goto :EOF + +:srvInstall +rem Install the Connector Server as Windows service +shift +set SERVICE_NAME=ConnectorServerServiceJava +if not ""%1"" == """" ( + set T=%1 + if "!T:~1,2!" == "%JVM_OPTION_IDENTIFIER%" goto :noServiceName + set SERVICE_NAME=%1 +) +shift +:noServiceName +set JAVA_OPTS_PARAM= +set JAVA_OPTS_DELIM= +for %%P in (%*) do ( + set T=%%P + if "!T:~1,2!" == "%JVM_OPTION_IDENTIFIER%" ( + set JAVA_OPTS_PARAM=!JAVA_OPTS_PARAM!!JAVA_OPTS_DELIM!!T:~3,-1! + set JAVA_OPTS_DELIM=; + ) +) +"%CONNECTOR_SERVER_HOME%\bin\%ARCH%\ConnectorServerJava.exe" //IS//%SERVICE_NAME% --Install="%CONNECTOR_SERVER_HOME%\bin\%ARCH%\ConnectorServerJava.exe" --DisplayName="OpenICF Connector Server Java" --Description="OpenICF Connector Server Java" --Startup=auto --Jvm=%JAVA_DLL% --Classpath=%CP% --JvmOptions=%JAVA_OPTS_SERVICE%%JAVA_OPTS_PARAM% --StartPath="%CONNECTOR_SERVER_HOME%" --StartMode=jvm --StartClass=%MAIN_CLASS% --StartParams="-service;-properties;%SERVER_PROPERTIES%" --StopMode=jvm --StopClass=%MAIN_CLASS% --StopMethod=stop --StopParams=dummy --LogPath="%CONNECTOR_SERVER_HOME%\logs" --LogPrefix=service --StdOutput=auto --StdError=auto --LogLevel=INFO +echo Connector server successfully installed as "%SERVICE_NAME%" service +goto :EOF + +:srvUninstall +shift +if not ""%1"" == """" ( + set SERVICE_NAME=%1 +) else ( + set SERVICE_NAME=ConnectorServerServiceJava +) +"%CONNECTOR_SERVER_HOME%\bin\%ARCH%\ConnectorServerJava.exe" //DS//%SERVICE_NAME% +echo Service "%SERVICE_NAME%" removed successfully +goto :EOF + +:exit +exit /b 1 \ No newline at end of file diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/ConnectorServer.sh b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/ConnectorServer.sh new file mode 100644 index 00000000..7f675dd1 --- /dev/null +++ b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/ConnectorServer.sh @@ -0,0 +1,170 @@ +#!/bin/bash +# +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. +# +# Copyright (c) 2014 ForgeRock AS. All Rights Reserved +# +# The contents of this file are subject to the terms +# of the Common Development and Distribution License +# (the License). You may not use this file except in +# compliance with the License. +# +# You can obtain a copy of the License at +# http://forgerock.org/license/CDDLv1.0.html +# See the License for the specific language governing +# permission and limitations under the License. +# +# When distributing Covered Code, include this CDDL +# Header Notice in each file and include the License file +# at http://forgerock.org/license/CDDLv1.0.html +# If applicable, add the following below the CDDL Header, +# with the fields enclosed by brackets [] replaced by +# your own identifying information: +# "Portions Copyrighted [year] [name of copyright owner]" +# +# clean up left over pid files if necessary +cleanupPidFile() { + if [ -f "$OPENICF_PID_FILE" ]; then + rm -f "$OPENICF_PID_FILE" + fi + trap - EXIT + exit +} + +#setup classpath for Java 5. It needs the exact jar file name +setupClasspath(){ + for JAR_FILE in `ls "$CONNECTOR_SERVER_HOME/lib/framework/"*.jar | tr '\n' '\0' | xargs -0 -n 1 basename` + do + CLASSPATH=$CLASSPATH:"$CONNECTOR_SERVER_HOME/lib/framework/$JAR_FILE" + done + CLASSPATH=$CLASSPATH:"$CONNECTOR_SERVER_HOME/lib/framework/" +} + +main_exec(){ + exec java $OPENICF_OPTS -classpath "$CLASSPATH" \ + $MAIN_CLASS $1 -properties "$CONNECTOR_SERVER_HOME/conf/ConnectorServer.properties" +} + +service_exec(){ + # Keep track of this pid + echo $$ > "$OPENICF_PID_FILE" + echo "OPENICF_OPTS: "$OPENICF_OPTS + echo "CLASSPATH: "$CLASSPATH + exec java $OPENICF_OPTS -server -classpath "$CLASSPATH" \ + $MAIN_CLASS $1 -properties "$CONNECTOR_SERVER_HOME/conf/ConnectorServer.properties" +} + +usage(){ + echo "Usage: ConnectorServer [option], where command is one of the following:" + echo " /run [\"-J\"] - Runs the server from the console." + echo " /setKey [] - Sets the connector server key." + echo " /setDefaults - Sets the default ConnectorServer.properties." + echo + echo "example:" + echo " ConnectorServer.sh /run \"-J-Djavax.net.ssl.keyStore=mykeystore.jks\" \"-J-Djavax.net.ssl.keyStorePassword=changeit\"" + echo " - this will run connector server with SSL" + echo + echo " ConnectorServer.sh jpda /run" + echo " - this will run connector server in debug mode" +} + +# Set Connector Server Home +# resolve links - $0 may be a softlink +PRG="$0" + +while [ -h "$PRG" ]; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`/"$link" + fi +done + +# Get standard environment variables +PRGDIR=`dirname "$PRG"` + +# Only set CONNECTOR_SERVER_HOME if not already set +[ -z "$CONNECTOR_SERVER_HOME" ] && CONNECTOR_SERVER_HOME=`(cd "$PRGDIR/.." >/dev/null; pwd)` + +if [ ! -f "$CONNECTOR_SERVER_HOME/bin/ConnectorServer.sh" ]; then + echo Invalid CONNECTOR_SERVER_HOME environment variable + echo Please set it to correct Connector Server Home + exit 1 +fi + +# Make the script location the current directory +cd "$CONNECTOR_SERVER_HOME" + +# Only set OPENICF_PID_FILE if not already set +[ -z "$OPENICF_PID_FILE" ] && OPENICF_PID_FILE="$CONNECTOR_SERVER_HOME"/.openicf.pid + +# Only set OPENICF_OPTS if not already set +[ -z "$OPENICF_OPTS" ] && OPENICF_OPTS="-Xmx512m" + +for P in "$@" +do + if [[ "${P:0:2}" == "-J" ]]; then + OPENICF_OPTS="$OPENICF_OPTS ${P##-J}" + fi +done + +# Check Java availability +if type -p 'java' >/dev/null; then + JAVA=java +elif [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]]; then + JAVA="$JAVA_HOME/bin/java" +else + echo JAVA_HOME not available, Java is needed to run the Connector Server + echo Please install Java and set the JAVA_HOME accordingly + exit 1 +fi + +MAIN_CLASS=org.forgerock.openicf.framework.server.Main + +java_version=$("$JAVA" -version 2>&1 | awk -F '"' '/version/ {print $2}') +if [[ "$java_version" > "1.5" ]]; then + CLASSPATH="$CONNECTOR_SERVER_HOME/lib/framework/*:$CONNECTOR_SERVER_HOME/lib/framework/" +else + echo "Running on Java 1.5" + setupClasspath + MAIN_CLASS=org.identityconnectors.framework.server.Main +fi + +if [ "$1" = "jpda" ] ; then + if [ -z "$JPDA_TRANSPORT" ]; then + JPDA_TRANSPORT="dt_socket" + fi + if [ -z "$JPDA_ADDRESS" ]; then + JPDA_ADDRESS="5005" + fi + if [ -z "$JPDA_SUSPEND" ]; then + JPDA_SUSPEND="n" + fi + if [ -z "$JPDA_OPTS" ]; then + JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND" + fi + OPENICF_OPTS="$OPENICF_OPTS $JPDA_OPTS" + shift +fi + +shopt -s nocasematch +if [[ "$1" == "/run" ]]; then + service_exec -run +elif [[ "$1" == "/start" ]]; then + service_exec -service +elif [[ "$1" == "/setDefaults" ]]; then + main_exec -setDefaults +elif [[ "$1" == "/setKey" ]]; then + if [[ -n "$2" ]]; then + exec java $OPENICF_OPTS -classpath "$CLASSPATH" \ + $MAIN_CLASS -setKey -key $2 -properties "$CONNECTOR_SERVER_HOME/conf/ConnectorServer.properties" + else + exec java $OPENICF_OPTS -classpath "$CLASSPATH" \ + $MAIN_CLASS -setKey -properties "$CONNECTOR_SERVER_HOME/conf/ConnectorServer.properties" + fi +else + usage +fi +shopt -u nocasematch diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/MonitorService.bat b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/MonitorService.bat new file mode 100644 index 00000000..19fe2a2c --- /dev/null +++ b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/MonitorService.bat @@ -0,0 +1,2 @@ +rem http://commons.apache.org/daemon/procrun.html +start prunmgr.exe //MS/OpenICFConnectorServerJava \ No newline at end of file diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/amd64/ConnectorServerJava.exe b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/amd64/ConnectorServerJava.exe new file mode 100755 index 0000000000000000000000000000000000000000..dab7def75583fa8c3a14fc14cd2d733070594633 GIT binary patch literal 103936 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
i<)Hajzhy{Az;;^2j`8c~ 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�}yf-3CCwqWe~KaW8E2#&)Y{zAX(-n9Wy z9o2CdTZG=h)k=M%y4MCrbv(=W2;Q+}D0BLDiXT}BNg>fr$k2TeOXq0!MJ%kLY^(@n zye^6W+k>5(9+z(?ET1M}_NIp29dI@Egv_zct z0sQvf72tKzv-};ii@%pY#oy^W`CIe^ep~Mvb6nmoIxKIOKQ3<>JLD~QtGwksjN8Na zWE{mUTp_mam-qDThj7P1QQKeT`^FP!{v6E6!gC7#w$X9>VMO|1MlXJcrHkH!8T;`B z^{Ij$2Rp*cw#|qY&UM5iTk|JjE6yj-_Qc`Je55~&ec=&$OGlJn+!xJVi+eQp7WvzS zU$v{2szXpZXZ5(pXKeypa{}2zj<-*#IEM|kdh|#X`v6s(GYkOb7CK6f?T|?9v+i)E zN})yOylhsF*{B{Tprn@-V61w~MD^Go-iHd1$KD>`J?-Vb`LepqLOnH-mBj$nWwxv? zvtrfdNK}`jQC((s3|n{&Vlb{@e0Jd*c*?}n$kV?*eZ2eEBK$8X#9n7O|A5LAC4c>* z-CLo(z7fU)#2eXjBUaj`_pBM&xTtpVk`+sqp%#iBHDjXMDbhwzh8b3$V(bA~Iw$Qp z!`AI=>g5}{{hrc@0d6Y$435rm*ZZJKL4Ne5fZ<-)8@USX z_r>HzR+e?iHQj5o(n7i6lI$Wakly_qf*y68L zoO?zUIv0no2``$n@z^cnvCShEKm;z^ls+7dL6sEPGGu6BZwX^n*bA%?wMaEMB57sR zm~jq6GUyE(Q=@T@K0)wHqn|EWj_)t2p^Vk3i&yN!V_FEC#FSuqYego0SY>s;nu=FOLq>|o!Kvxj z0(g456NePu0Js)#6(Ads4tNK2#{s>7#{ruGHv?7!vf*zo?vwZo7y@`7xZ{9bfQJEh z0d4`T1}p~fdJHWKwk{3+Lr2wv;x*2dAU<=?0Kri4|fVTlS zH$sd;4!u0SQz#KpopcQa4;4Z*-0nY-C z0Dc2_50H)-CSL+v3z!S21-Jn>1MUQT8?Xy-6c7QN0o;jjZUMLf%K-}ka{&2(F9Sva z`mxF^0yqXZ0C)!QL%_p;+W>0;t$?L~DnJRK0FVR71_;21pMVG82w)GOWEkQG7y|eh zJ8OR*xGjJ#KoH;roP!>g%kK9QKY_DBCbT^$-Ejpe%n+n3wh9d4IL&$q*Kfww=InyOpML+!p&x4S-Qv#$vdx3IEhz8);|>$afoxWU$8YpOQ! z3aN0E!JsYITWukCP~j^*u3)LZjb22(9+c`Rud31ly3KEQYCc=gsRg~-)w%UoiyNW4 zI>fgEF)I{P>4kpE-R^Q1QZ(rGuWKgG=hxj{n*)g}y@}<}Pe61CJ9HBi*NG`e35V1k z@+1hE1gksR4Qk|3u}Zk0=jDbzJET^Zqj%l`PI14D0s6ebuWO9U0&lynSX6pCY;KoB zs|$I8u6Di3wMyZwx?c?+t358M`vK?!KHctWb;Y6}a-pG$wJ!96z1}rirweM)`D*t% zU@8ugzuG1fem3HtS5EHvcDF4M$fpL2U_UZ}l+LwzHkVs>h#L^+8fo^+avdu)1|jkm z2Lic{HMqC0&2_Z%j(6A{0;6s_T77<(C)mnoQ*IfMOex6%`6LkX`MiD@goZTNI&^

Ow0Ypa9 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%0DAMV9%bhjfKO|l;I9P+{6F`n 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 + exit 1 + fi + shopt -u nocasematch +fi + +# Our classpath including OpenICF jar files and the Apache Commons Daemon library +CLASS_PATH="$OPENICF_HOME"/lib/framework/*:"$OPENICF_HOME"/lib/framework + +# The fully qualified name of the class to execute +CLASS_LEGACY="org.identityconnectors.framework.server.Main" +CLASS="org.forgerock.openicf.framework.server.Main" + +# Any command line arguments to be passed to the our Java Daemon implementations init() method +ARGS="-properties conf/ConnectorServer.properties" + +#The user to run the daemon as +USER=$(whoami) + +# The file that will contain our process identification number (pid) for other scripts/programs that need to access it. +PID="$OPENICF_HOME/.$NAME.pid" + +# System.out writes to this file... +LOG_OUT="$OPENICF_HOME/logs/$NAME.out" + +# System.err writes to this file... +LOG_ERR="$OPENICF_HOME/logs/$NAME.err" + +# Debug options +DEBUG_OPS="" +if [ "$1" = "jpda" ] ; then + DEBUG_OPS="-debug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005" + shift +fi + +jsvc_exec() +{ + $EXEC $DEBUG_OPS -user $USER -cwd "$OPENICF_HOME" -home "$JAVA_HOME" -outfile "$LOG_OUT" -errfile "$LOG_ERR" -pidfile "$PID" $1 -cp "$CLASS_PATH" $CLASS $ARGS +} + +case "$1" in + start) + echo "Starting the $DESC..." + + # Start the service + jsvc_exec + + echo "The $DESC has started." + ;; + stop) + echo "Stopping the $DESC..." + + # Stop the service + jsvc_exec "-stop" + + echo "The $DESC has stopped." + ;; + restart) + if [ -f "$PID" ]; then + + echo "Restarting the $DESC..." + + # Stop the service + jsvc_exec "-stop" + + # Start the service + jsvc_exec + + echo "The $DESC has restarted." + else + echo "Daemon not running, no action taken" + exit 1 + fi + ;; + *) + echo "Usage: /etc/init.d/$NAME {start|stop|restart}" >&2 + exit 3 + ;; +esac \ No newline at end of file diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/prunmgr.exe b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/prunmgr.exe new file mode 100755 index 0000000000000000000000000000000000000000..730240403a7daf5d3d0ad8e879b6b040c9668c83 GIT binary patch literal 104448 zcmeFa4SbZXU1z+%`%s*3N$sZytjGreSv!xuUN4%61aOwpgFoCuxv%(wma(r_pNML zGQO~I@JJW*;eQJ^W*s(iOT_Wce? zZ-4B^y#K%`e{8eLcg(%NuI{zV?lA@C$F(3>X&5tdJjR-`S)o*(E+a2zNX{U`c!HQK za#Zx3Hg0~xc6qJP&$)(?&zt0syZYP)@;? zmp}h+?XGkB3Rnfwp&#=%KC)zOgtRX_&PDK&wz_!pr2Ybiv1ojA!{W$d!|?K=@VlD( zRzlWa1yzsN*^J?LkkCcAjsQ;Ce-(z&KE8QX^F0zNZB4b=k%-J+#W_vMr2Nm*|0@d2 zwodLG4dI=OEyHMAo8VDJRq3~Cio#aZTW_r^NIcj1N-~*v`M6x; zJ#w|*=DKd!!qWByR!v{&YtHts8HV-S`FracM~0pEM)1-Z+viREO&9s%Z~9sT2#09| z48z{iM^tU2kysT-lqHLof4{;ACX1W6#oK+Yy@-X*7ngiN>p&=393jyy7j}kSVHk;N z1-4EPJGs1DcNE0-`4iJT@mGDV&jCU}{WEu~{NxWRjK+DP&AH zaeOc_&6_-C^+@9BNU{0k4=aptvUsh+CYoRR`qIRwtZ7~{W^$ET<&ti0R(X%b+oJ;o z;Lz@?&5c=6QncG=KA4WmTbdZKi`tFJ6NSjW$9{-EN_ z>@cElr)%`J-i{88y{zb>YL1Mxw#b`rN3J;#;)8S#9HE#Y;|W#B&bUrLhmjM29V%T%8*& z=!i><^mlg=@#B2)2Z1ALzIZcFbdDCLr4acF`ma1P7@p)U`hNG&6pJR}8oDNfuk}(& zS|fz+R);3KWz+_fZ_o)PRd&JZ*p#0ew&&-G=cGXNS0_$@fTduRzFxK`GT1txEA5`B zyQ3^$@nTE~i{dAj<7TvYDw3+l5-K{O7+~@iX;h@dE?RBfcC5g@@z{4{G>MKXGy*jA za@(`ozOloqD)^4PM~03{z6EW#%P#Ji%H3 zIV&y|nBGK{AC51w3vLP31)bYJV;FVLHkIVp>&aX&iB68~Mf}Q)=q4*J{nRqEK&TjN&xuU26ty+wD>UhKAFcYLrL?Ja z=)~$jCX-OQWk!c8XL~vl!J;cmgb|1_uU0rr))kS0WB&H45 z{cIQgMWU|6ii@6}yUw!rzmTjF5q zkMU*xiO-c7h8w|qsH3t^B+c1?4HoMiz3y{iv*cM2^m0iS&p<4#9<=c1%;TV)EN&nI zwjSMRG#Wva@@C!_2wIJXUD+2T+DsOkQmV2~VO!a!l2wh=7dttrE?nOTq$x0o*;F{y z*!F~XD(@A-G|>X9{5BrK=5~oZW{s$pZ1V&o74rrugC)hBq2lEE4ZE^8*iqT*r5!XU z$=H)Dp0k}IQ*P231-rOEn6KmT$XmxQ+M1cT&Jt5}lj8w30!x^~->QvK2T z#tHn(*|wFpHp$VrBuHijtFa-p?J3Ds{3tNDJ;UQp5ZJKo*#g?MQ!X#brJalOjk9#o zY_C-)khVQboeEq><$(#5Nvu1Vn0+X*?nq)?XQJ}BRV=le#zTftpQ!0d%s!PYeu6p@ zm2caX2WY8NpjvveLEU;3VT!BC;oH%ErgP!t?F&W;vU8;aQhhIXMgJSE8gJN|xR&ho zcIClfhz3=5j;TCktvfOXMCiB50>;k)$>ImeQ)kaUi7q>8MNf^1p0wuoj+x(6c4pnx zW%K*ijj$_EqPryR8G%Y%u^E?S6+Aai35Ez*yPO2^ti zrsJ>1?6D45mB$Z%kXLiE?7)Ks7ELaiTy|)^XG{kv(LQVMnEjG#cGuzFyvm-rWqZgp z+p(uiDEp91N3A`L`HDBKN^b}jWjLfJWJpLs`)OOO*Ry)y&PG@RVNzWg-rY6Glu^On z-Z=s;sq}^+OL2sf@pfzfL-{KAg8szR^i0EB-XGrJ6g;{*1+OUsPjX)nUhL$AFx_&f zaYE2}`5FU)`Z4xUn;n&hCaCT{auGKqaw5_viWX_SE>?3SH@2<_?(ZZKe(H)0?5I4h z^w+u)BkGCO9M4NcPjwU9X&@)?qFr+c0@Y*UEYDCVn_CpWw45{;+%mSPRasJJ&G)-j zXpwDu;A~S2#84t`@azl(>%?;zc~=Y>+3vJP{W^9UVG( z;_*=!VeudF-aROGHrLlGQzD&7)KvV<=g_GVDOIcE2NItwo&+hnKhMZ=lPNXS zTjdgC$Dbl&P-nbYG9GKZrOvK-8ru^&l6pHTpK<_gDeNKUutdCsG9CGXie%`%S_@=i z%Q^9bbsn-%k2F#g;!D(u8eX`d^tHLp^@wnm5W;^gC)=s)6X#@T93aizlIK;<+GCzE%bR(&d?q8RE?&0^&)$Cf2YI<4o{_u!S%qD2 zm^D#`P*GXti$sbxE|whDft@G5ZH+(k&fyQOJ-eMNr{?V`+r56!mtGx`C{*dHw0VH6 z6#X?sqo~;G^Y{1#gQcX?ptRXXbfd9N8k0PR!W|9WFa*@|Sb0ts zPmo)iR$s0OthNp*RkeVUG+RcvLjy_Eq@tWW)RQTV5+|ubk)dh zm`{!X3-dz?Qi}&r=PGpai((TicV+=iF!4!&aq_Sg_A`}5RR(B?7%wBaEB%Q6SNsqO z!3mM^<9g7RzW7tr5e%aD&3quF<~Tw)+AjTF+AiJX+fnJKSadBza$}C$392co6IB<4 zne2OO>z#^TQK&^SM>-w(j5PpJyC$~YV?;*OStEolK{KD;t53dRRe6Hu0R24Iu90Cd zY;L$xGg)GNQL=bA*e}EmU!c)QlZ^JqPL^0Tert9K4NKIVv}>G@xt+2yKvxzeX7@01 z)FvuVDY-N~)FPIbbcQBrmbP=pk4gQ;kGhoq!j2z6xikiXrEfY%hO3!@Z97DT8ZUy$ zo&-fJF7JuwBxC7m+m^e%rAP84UOpm8TMlvUh<9@JgF@oD;}ZK^m%6?!*Z4uM$>OI0 zSGGTLjV_KoQ~VS$(C{KVE&zkhrb5BNV|Cj0Nh0Ws?K;Ob%+!dm6mpi|sx4x&`??$H zwL)Hb6NPW>6_r2bek9wqyP#*wNfQpp*7rqLO^G!-kTr@HF#AL2*zqU0HqHs+O5h=} zrI)L-^K#%R>y+6M5imgMtFd*%jl|0bcwM+Op_CqzW-0UBR=I9@lB-r^3le|x6fYeL z_8g&6{D@?+_oS306wK9KXxoAvWO1D{Xg%yYIquT0ZL-t3@<0yw}FsUko-5Zmcqg zflgTL|AX`bQ)xyJIIl4$w)^=|ZR1E}^CF!?(kcrmThe$#to=8^M!)IHq||ub#FpJh zP+O1T+wWwfU1EMX)i4y0dDPq)=?nH)v zJj7)Y2xkJ>V=pDqJB@mQ`ml4V8G^Yy)87!kk=2K{UxQZ;` zCbP8e+ihDU5Df!c@n9Ch?63ikbscd@qBv|NVks6%LWyefsQF|zD4F8vLJ&wyTD(IP zu3u^n& zF<90m)}2bsKB=ZPqUK}!OQy%pRyQB8%H`DzKpt54CdrB=N>4U=WGc$=%XF2wC#n3q zm*KQihEp|31`nCFTE!AYr}Ts&|19#OCKqvQlXzIx%+p}a?biUSuP#~K2`v{c*e0B% z=7LJUN7C&pb-TL0o{k=*3ah~hX|QX0L-y>x+Qy_Q)?IyLPS6RmRAKcni(mjMXgT{1 z1o6dx%r&;I&+t9+4?J1X-q`*EyQaPI#*lONQ)GC)s?Q3aLTM2higo2S8nFXjvxdqJ zJ9QnEVhm$}@1y%3O3Xf@riMZ(9HV%&rm11>a(nipwe@C15bUVjEF6`nd{U32R#h(= z=yKle%148lOb8IvQ;^ns>4n&ReL24PJyatzR2t_zxXLixMzjtge&K@irpuZi#@2;xt$_T&2a%d|Lw$l0E;S9SXqE`9s!tDC=3&-Gjj!prWxW2F64{d#|e*l?SZ@#bfX&%Z&pZels>CCj3r1&J12sXY??G8^?q1cn5u(S3( zZA@zQtt4#QJ{Z*6@2r!V!hYuw6t%rY#@t#8zb%E8UK*oDY6dz|#;8F$7;;{~Hbo}( zC&~{2#JP+#w3=(kYCZeiFVp7VDvRpa?sxpY9UZknr$yVe?qKiMgU2FWZx{7uT;EGG zFlvCXTetY@;-!yFvJS*fH#WQd_Yl7;!$Cu8DTR|V@@|>r22Ih+=Y4&rpw^^VpFQU*dh>IbxjSZYo(-l(pFpYjis@dC66)J*ZMxuwk--i1Ov>*iokxz zw8&YRYSFmCiu?AEKjsYf#b4lo$xd~wccAa9&+w8Q8TX8>Fs$hwtG-~&p_UI15V_8q zFSo?>0&Adkr+3VOmJj9tXWjaIxh1B1GgYliS7nj=(3pCU3u2103=-2l-8Y<*@=xiM zwvVlLy4N}|#^+W$F#l;kNcfW^Auu-Z9`z=jH9!?C;1IRUm)L8HN0d zu(#a&-mZWCwXgLrh{rgq8rztppjWY9be&F(M6H=c@mC|YEFWMTXUhdgA8C!@dZs45aP;%`QVTj8XWjADceysR+`X~%!TqevcnS^RR>7kstNsbPLQ0jrJnb!%0BV%>j?w+w|Q9(P;)*A zS15y^x8)Y{=0tL>UI@iioaECd#r9tr`(001xj0LxBC*z!n6NO`?$2^7{%7DZohkkV zc-RKCRII(Hd}&7OkKnhb9(`ge3WisuJ9*RV5YUq?H9{c2h}i#E1RgGSd^_IT5bz z{=ACz5MAj;v&L54eGP59k|^Mm#K>JAv}eu1<`t-i#*QvQJWXpkaQ8u16|xNJs62O(F_ zip(djh%B*Yjzz$gyoa^Cql}ciE4A?_rM`-$Ltu|E^v6s6f{_W~OJA#45b&n2^&32} zF#=i%k?lK1<6)&a*I6Tk{CYnCo$-e52rJAKnAz~2(Y2B-`dirCs+ywOKeHlHT|xW9 z6^XieR#k;Hb4r55k;!VWDy9mlUa@ALva3E(iWe?W<|ujsrEr2j-PT?Lh|L>Ga> zVqCL`NkXyoPF>jfS24R+Pm%sP9qqQJ&jHOMyJ4gebUtJtB!bbNM)br!@<*>cJ>8ST z&VuQapyJy!eStmg_j5a@vuI%$sD_r0^01hq1KpSfbM<^q$$Qv*o8gRkGsT?mjmD%h zMBXQM3RQDVBfvBm**Ut+Pqgeic}$32D47~PrmU9W+QI*-A`C=JWyHRc@=aDxqZd^r z%5j_Mkwnv^4nr7~rdGqck!g1IoQ{f;?KjY0A#Vq)i!j~p>A=R|Ayi<>Qm>M+oMdqq zFlpg40!@~NRWlZ#{uZRP-@$`z1teGpDz?cT2^*j??LAQhK}C>a<0K&`TBk=1t7%fu zc^V@ca*9Pu4QMntWbxr#TRkqG@+ zuJq@?{`&J48k(&?|AF>u{YiJxkIbK_-)Ky!&eN3zIURzMj9IAA$R%zU82Ax1vC&yM z-FcKvR86w0<}?}|1IV6}SU(a4tLR&e!^U1Xy3SQu6&{z|)deZ_6uDy4`O1q)aawuZ zxyYWr=se|B-;h#X)4k*tz~s%U^5UQ%;>8V*KVh8tO`ghr@s=K<%6{T|xCR(&*t#QS$`1J+ zF6X^vy>~+>hk*;5@eWVoPLFJfsrOpb3NUF`mHBqeEb;9Kf6BK5%Zis_wY&`t`gRP& z^JG6Z9E?NwZ2)KnpQ{j?M3zQk`$l$ON0DKa80y<`NibAvKO%W$8Ab92$P0hyyd`#c zc&)u_WE)UJfc5d?Pp5$m-W+WEgy*AVa=xiCV54Zq;p4(HOd4?A|e7dI}?p-lDGlx zAeXpVd)wwZ+wL*aj@gWTu``I>snRn2netH=nO8DHw&TBIK7vwDJh#0Yv;F0LT=&P1 z6KOb)1C-$z$0?DJ1^zXW=tTSg@92em^a64-aTem0dM#=^wQEtA45?3n={9-n_O_gr zdz9^C0tr9{dbDhTXVt~5B(~4hQ^&5mbrag=2smxeKPd!EMrNwD0L+}c=rrikORPO_ zQZn&3oq#KQD{`~w+ppzKnHRZe%Jq@LJIdaQ{$3|`Uz5&s=`=UWk8>@BhJs*K4yTvq zTB=>PEsd96Gf!$B>7zQV>%8b4tQ^$V+3|PDU>+fnZa4)&(EZ)l)0fhzA=7}YC}PtX zCIs6`;qGDf>;TNF$V!8Bwy%Mb=Pj zgfJ_cM-)fa*N0?-SM=I6(;l1N@}XkdB5Obv+cGnttA1e()l5r!R3)}l;(V7jSc<~2 zb@+kHpP+__>D#fTomAhB_%3y`U*d*PZ+VeBavgu3JCd$o)CLjm<3yOxYT?%O4q(^C zrD2G(q`GtrS_5=$)!nMAiW838nj=&Wm0YOM03MV!zA#k;35D-MQ9VV?MH<8cAm3Yq=Y9rrsLs&WZj3xYn87 z@8;6GKI^i?rLjF8T+Xp~bE3bG{ja>pYR!+AZM>BH?~xy;#{9i@!OeEjB zvVKu259|s`vIEQdJ+)HZnK5U-c31NDF92)fWjN>ES}vCP-CcdL6Q0;RQcvPC<_FYN zpfkUxGOJqL#&biSbo>1xLA3uEk~8EB8zvi({Hg5w`~wcX!+FP|1GI-gxb)(>*oQfh z0bjcU%)d}YO!U3E3y}cjKuE*O(DQU;=ogm805~wVI~S1eTZhLSI{e|7_ftUG!EHpY zaQAPY&4~h0V{)G2+PW!sCik0OJ;>(7(LNSp>??EMM$m&J$}new0c zb_~{gJZ)hiR2x?M+^44c1A~KL~X27oV57#C-8@(4kgULtW{cEKA%7 z-?FHnJp`!t#DWH^YI*;d zV4d)PEE=@G<>Y7tF*6px3~HwUTiWBDVk}e^iEmTcNr~t5n!l{WC!Ukd0qihWS4Uk> zauvaU4x3%t@$*D87Jw<|Ocd}w6SzC?^taQ=Sl_fcJv9I+S3}$O@tcxx8UF3*d6=td= zWx{pgu#6m1%tYI7z~M{hvy(k8>A^ZOD&TISmqe?#>}+I+Cdr9H3bkzo3%xDE-Xdg~ z{G6)gqHwK(FPoke)FHKXYP)9&im#Q=X4p$2Wvme*DQraHnf)UfKk;)C!zPgP;w6Ud z;^)OnjNZY~AC7bzL-l$2C8qvFA0&ca9$#ylh;M&lsSP5!F)ndUvS)~83ycuNaw(}3 zQ_U1&Nrn?$0=ZC8OF?7;OLUrAK}D?)yr8KC_2nfSjO0J@SAYRkwrt8iwzfyJc|iMj z`}0AuFpO?&3t%Jj+(1ICHtRMaYu~M>H2Ds+#Po2UD)rM>aq!ZAK^;DYgXr4SQ$NBdD-O zjJ}P+e|kSDO3V3`o1}&f^o3gQVADHbu)KV&JGd)1>c8;Nax)iH|F^lZkXv0J>%C>o zc;E9IMowq?IWq3$X04yoeTlVxdG|1D{k-l%YkgC<*IK^_@5}lKe$n*eiD)4v0k<%O zp#9R0WD$>!ss<`BtngY{9LK`BpfCDityh|-*frXhZ0g` z9l%41tgV$H|J5vhd7r?QWTZ+>cu>ViUU40fUMz-$^9 zGu0RvWpSqj{tcVf9>uz8LTfIs6E=VPjIcQ$TA4r}4DtUvztg zaRp&C;ZnjigmHu$3I84aashoI+^za!7Z0ia_yN!T`lI0v)gRT|{>=WE{)uePEMB(L zh^t-xiQbSw=7M@-xY{>a#LRji1;|-J&NH2JFK=I1agP3Y3cmRl!cM|>2tOpeOxQ>G z@1SE!hg^W3|2sv`x3lQkc`iLWXDE8U#O=?d=gt2)dPZ+@`8-;}D0YK2Ld?Ff@=T55 z2CwTSRhB^Ec1>G);Zqroo?Rp~p90Ohe>XR^zXr9Q(kZ9ljk5$VZTf(F9``~*5#hg! z<`D}j0q)(@P*Y*7Agm=U zBdj8a zFK$D*2bDF?_tRvMX^Pr)dc9RFwKFjwHdN21`nUqXd`8a)BLS9EBrRDiw#WiCwNqBq z5AFbWF+5b2dd`av(N+M03Ip*XW=$kyo9ixi;!soA?~;#Ju9qXu?CsFv8`o}Jk*wlwi{oPC2KUfgPq7#>}Arj2D%~8Mh zwX>ZyGArCz-;L?#HG69DNzVc!$sBUN4^lD(Y>!+by*~^Oo$}4*C7Ko`f^+a>nFn?< zV_aZvmz&;6wDsSmPzjx{9bE9cFt;+Z@*?b)ARd3*mmbFCiC4gUnn6trCALIq|Lp>tO$}QoL%Ota&NB zM5euBm(kbX2Mnz7n~Nm5RU20w9~R zLK=ej(!(P|wa(#AT0Ps#FeP6&)dmxaNq`Nsg>#`RFyiOHDAX_(YEo99oLr91XUhI3j3@Ws#ytUeNi`zhyeuu4-_*InChG-)J&#>}N@} zM9Ugx*>S1{xf0v&cWUgIT8)EC1&wri20Yb2tj)r&zc8z!2pZCRbe!Uf;NJ&lgs(!K&kl8 zR`!TIEG#5+3oze+JKL zK2f{jqj&Osc(BpSH>G3&C)t}LpD1)PR+qYSdigrTp8a;MWDNuL4v*Sd#lr1bdv;H) zDcd-l!MBOYQ&8G&)$}wZ_!P`A?sE6Vm%f>pe_Z?X%jS3aVmE_>?RnF_@sSq>kb%ATOEetcRde?7K;me6;fk5A~Oj^V>+S%a3YmYQIs#GyMlMw za^%kYyC>MwHpF@tu9<1Q(ej%v66{-f53acxXWBD!Vb78At=uSu51k(L+OrSUW;912 zXnvQjRhpx|5ykQFuax3Ysz}+W>x!_aFP5br_4Os6^WbFVcqG5<==fA@-I0NOO;#ma zYJ|`IP`CTjv5#`1!@|xZ^4SFbNtS^kMSOu{g+20Ze;r&P{Da{#Lc~lqH?utUcA}Co zPdjNF8#JR>vwQhCMG661D?4AS_;WGbCf6MC#ciHC&^teSCN+!>yp>Xg+W7klst7UA~-+v=q{Bh);kzjgR@e;D5d&h z?ZZ;=a@OURwr92{%J?DjgrwrT;Zql-eKDvmc6Ibm0TvygcaEYQ>+RcalAYhhhhbRv zYcBWo9%>Zn!;p`jTGs9sMODBMBiC^WOt~(Ot-F3LCkaI^BPlnTqn-!JSx!Vo&+riK8nfqcZ`Sao+M@>S(l^y13)X&FLH4yi zNjrQyd@Q;8S~v5|i9+L|1K1#L*K;(~7un_QuJ^Jm%WL#Z*|Fw(;ThIzV<#rW-pP%9 zFlbFUInusu0UL;3?Jj>o^nCYCFNn(NzWxQ#8Qr7R9)RwvUdWfX%U%%m(|z#^1Laom zf>&<&YQ*t;?if+Z|7GSCkQ=+Gla8*e5x%VTuiu( za1}v}6rmsAch%c91)-qT>pTPZ%hv_$(JvZc-!=^CaCWj&1KF|;#80mt&o;rO(ATRM zw7V~PQASGr@}h7~W}!QNdd=%%Y)CcfKV2WjK(O?*>lC2xI_(*kdobx{s+zofZ+Rg8 z=IT$&`v2?#-;ScMERB80rjydwyE)3~!@&_OUs+DCnqKx%^RG~s()ISNn>>k&vRFga zNqw@O8)n6{^i5ogKM-x$_Jk6$$XIJ*0rp+&15b45=?#7!b2vilft>D(`A{l4)Y{;Y z)U_TDUtatIgFeUH^kRi!{wp04c4}Yb3s+3ch(sM$QMVAqK6P`BM7^$}#=21z5_L>P zT}o7JAL^Z)H%jy&6`f18ND=>%VdvBfyh)DHlH;h#(M24lB%d(QirBs>e0PP!GsV~ z?b`$v?6mVlFBccR!mM$4uw}OwTtd!E#|3Nkp*cOFPJf_2Awg=SJg5D4Nc*dF`-6*9 z?dMzBTIKZzUx@!F@J%%@3-441osa)FKN0^vHA($5@SiF8->&iZ-|gaWZlIE&^YzoJ z3;!!kI3NE{rvH>b7yoSfA4=ih$W-<9Km3=GrxP^(F()@NNO%060xTB4mGd2zRrv-1 z?dLTT9L(w6_O$T0X!VZ#wLHq-wx@WQPmxr23cQw+9u#H9-⋙Y4Wrxk}FeDU+Zy7 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μ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 G)&B#j_9{*Q literal 0 HcmV?d00001 From c18749af4b5382287be175d202db1fbdcaa506c2 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Wed, 27 Mar 2024 11:54:11 +0300 Subject: [PATCH 03/22] Add IT test --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8a5c2b1b..d8cacc25 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,12 +36,12 @@ jobs: - name: Test on Unix if: runner.os != 'Windows' run: | - unzip OpenICF-java-framework/openicf-zip/target/openicf-*.zip + unzip -d OpenICF-java-framework/openicf-zip/target openicf-*.zip openicf/bin/ConnectorServer.sh - name: Test on Windows if: runner.os == 'Windows' run: | - unzip OpenICF-java-framework\openicf-zip\target\openicf-*.zip + unzip -d OpenICF-java-framework\openicf-zip\target openicf-*.zip openicf\bin\ConnectorServer.bat - name: Upload failure artifacts uses: actions/upload-artifact@v4 From 9ae7da50d56ad0b4d8fa5ed729a9632529f24eb9 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Wed, 27 Mar 2024 12:15:21 +0300 Subject: [PATCH 04/22] Add IT test --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8cacc25..67289dae 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,12 +36,12 @@ jobs: - name: Test on Unix if: runner.os != 'Windows' run: | - unzip -d OpenICF-java-framework/openicf-zip/target openicf-*.zip + unzip OpenICF-java-framework/openicf-zip/target/openicf-*.zip openicf/bin/ConnectorServer.sh - name: Test on Windows if: runner.os == 'Windows' run: | - unzip -d OpenICF-java-framework\openicf-zip\target openicf-*.zip + unzip -d OpenICF-java-framework/openicf-zip/target/openicf-*.zip openicf\bin\ConnectorServer.bat - name: Upload failure artifacts uses: actions/upload-artifact@v4 From ae1eb97d94cd15b00b6d11dcd7f11a3a5f6a7401 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Wed, 27 Mar 2024 12:34:24 +0300 Subject: [PATCH 05/22] Add IT test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 67289dae..3918cc50 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -41,7 +41,7 @@ jobs: - name: Test on Windows if: runner.os == 'Windows' run: | - unzip -d OpenICF-java-framework/openicf-zip/target/openicf-*.zip + unzip OpenICF-java-framework/openicf-zip/target/openicf-*.zip openicf\bin\ConnectorServer.bat - name: Upload failure artifacts uses: actions/upload-artifact@v4 From adc1c225abb1a466077972ab69fb1091dc5ee835 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Wed, 27 Mar 2024 19:29:33 +0300 Subject: [PATCH 06/22] Add IT test --- .github/workflows/build.yml | 10 ++++++++++ OpenICF-java-framework/openicf-zip/pom.xml | 5 +++++ .../openicf-zip/src/assembly/zip.xml | 12 ++++-------- .../openicf-zip/src/main/resources/bin/openicf.sh | 4 ++-- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3918cc50..d0af2f2d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,13 +36,23 @@ jobs: - name: Test on Unix if: runner.os != 'Windows' run: | + if [ "$RUNNER_OS" == "Linux" ]; then + sudo apt-get install jsvc + else + brew install jsvc + fi unzip OpenICF-java-framework/openicf-zip/target/openicf-*.zip openicf/bin/ConnectorServer.sh + openicf/bin/openicf.sh start + openicf/bin/openicf.sh stop + openicf/bin/ConnectorServer.sh /run & - name: Test on Windows if: runner.os == 'Windows' run: | unzip OpenICF-java-framework/openicf-zip/target/openicf-*.zip openicf\bin\ConnectorServer.bat + openicf\bin\ConnectorServer.bat /install openicf + START /B CMD /C CALL "openicf\bin\ConnectorServer.bat" /run - name: Upload failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() }} diff --git a/OpenICF-java-framework/openicf-zip/pom.xml b/OpenICF-java-framework/openicf-zip/pom.xml index 7f151db5..9825130d 100644 --- a/OpenICF-java-framework/openicf-zip/pom.xml +++ b/OpenICF-java-framework/openicf-zip/pom.xml @@ -63,6 +63,11 @@ com.google.guava guava + + commons-daemon + commons-daemon + 1.3.4 + diff --git a/OpenICF-java-framework/openicf-zip/src/assembly/zip.xml b/OpenICF-java-framework/openicf-zip/src/assembly/zip.xml index f7e07a4c..41b9b10a 100644 --- a/OpenICF-java-framework/openicf-zip/src/assembly/zip.xml +++ b/OpenICF-java-framework/openicf-zip/src/assembly/zip.xml @@ -62,16 +62,11 @@ ${project.build.directory}/maven-shared-archive-resources /openicf/ - - ${project.build.directory}/licenseResource - /openicf/ - - - ${project.build.directory} - /openicf/legal-notices/ + ${basedir}/../../ + /openicf/ - license.txt + LICENSE.md @@ -91,6 +86,7 @@ ch.qos.logback:* org.codehaus.groovy:groovy-all com.google.guava:* + commons-daemon:* diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh index 988765e0..48d0899a 100644 --- a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh +++ b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh @@ -13,11 +13,11 @@ NAME="openicf" DESC="OpenICF Connector Server" # The path to Jsvc -EXEC="/usr/bin/jsvc" +EXEC="jsvc" # The path to the folder containing OpenICF # Only set OPENICF_HOME if not already set -[ -z "$OPENICF_HOME" ] && OPENICF_HOME=/usr/local/$NAME +[ -z "$OPENICF_HOME" ] && OPENICF_HOME=$(dirname $(dirname $(readlink -f "$0"))) # The path to the folder containing the java runtime From 149ad10587c7c0e932ec62022ca1c04cc4e25cbe Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Wed, 27 Mar 2024 20:02:47 +0300 Subject: [PATCH 07/22] Add IT test --- .github/workflows/build.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d0af2f2d..fa40bbe7 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -45,6 +45,7 @@ jobs: openicf/bin/ConnectorServer.sh openicf/bin/openicf.sh start openicf/bin/openicf.sh stop + rm -rf openicf/logs openicf/bin/ConnectorServer.sh /run & - name: Test on Windows if: runner.os == 'Windows' @@ -52,7 +53,11 @@ jobs: unzip OpenICF-java-framework/openicf-zip/target/openicf-*.zip openicf\bin\ConnectorServer.bat openicf\bin\ConnectorServer.bat /install openicf - START /B CMD /C CALL "openicf\bin\ConnectorServer.bat" /run + net start openicf + net stop openicf + openicf\bin\ConnectorServer.bat /uninstall openicf + rmdir /s openicf\logs + cmd /c "START /b openicf\bin\ConnectorServer.bat /run" - name: Upload failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() }} From 5137a466f9c26629e6340ab13e848142ba6d1e02 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 28 Mar 2024 09:51:37 +0300 Subject: [PATCH 08/22] Add IT test --- .github/workflows/build.yml | 2 +- .../openicf-zip/src/main/resources/bin/openicf.sh | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fa40bbe7..040e2535 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,7 +56,7 @@ jobs: net start openicf net stop openicf openicf\bin\ConnectorServer.bat /uninstall openicf - rmdir /s openicf\logs + del /f /s /q openicf\logs cmd /c "START /b openicf\bin\ConnectorServer.bat /run" - name: Upload failure artifacts uses: actions/upload-artifact@v4 diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh index 48d0899a..80371131 100644 --- a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh +++ b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh @@ -13,7 +13,7 @@ NAME="openicf" DESC="OpenICF Connector Server" # The path to Jsvc -EXEC="jsvc" +EXEC="$(type -P -a jsvc)" # The path to the folder containing OpenICF # Only set OPENICF_HOME if not already set @@ -81,14 +81,13 @@ jsvc_exec() case "$1" in start) echo "Starting the $DESC..." - # Start the service jsvc_exec - echo "The $DESC has started." + echo "The $DESC has started. pid=$(cat $PID)" ;; stop) - echo "Stopping the $DESC..." + echo "Stopping the $DESC... pid=$(cat $PID)" # Stop the service jsvc_exec "-stop" @@ -98,7 +97,7 @@ case "$1" in restart) if [ -f "$PID" ]; then - echo "Restarting the $DESC..." + echo "Restarting the $DESC... pid=$(cat $PID)" # Stop the service jsvc_exec "-stop" @@ -106,7 +105,7 @@ case "$1" in # Start the service jsvc_exec - echo "The $DESC has restarted." + echo "The $DESC has restarted. pid=$(cat $PID)" else echo "Daemon not running, no action taken" exit 1 From c4216c580d56671d56c1667110aba1a5e9a6cb68 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 28 Mar 2024 10:15:55 +0300 Subject: [PATCH 09/22] Add IT test --- .github/workflows/build.yml | 2 +- .../openicf-zip/src/main/resources/bin/openicf.sh | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 040e2535..dce3f76a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,7 +56,7 @@ jobs: net start openicf net stop openicf openicf\bin\ConnectorServer.bat /uninstall openicf - del /f /s /q openicf\logs + del /f /q openicf\logs cmd /c "START /b openicf\bin\ConnectorServer.bat /run" - name: Upload failure artifacts uses: actions/upload-artifact@v4 diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh index 80371131..06a00d8a 100644 --- a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh +++ b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh @@ -13,7 +13,13 @@ NAME="openicf" DESC="OpenICF Connector Server" # The path to Jsvc -EXEC="$(type -P -a jsvc)" +EXEC="$(whereis -q jsvc)" +if [ ! -f "$EXEC" ]; then + echo "Could not find jsvc on path $EXEC" 1>&2 + echo "Ubuntu: sudo apt-get install jsvc" 1>&2 + echo "Mac: brew install jsvc" 1>&2 + exit 1 +fi # The path to the folder containing OpenICF # Only set OPENICF_HOME if not already set From 0dba119fa140e38722e32caaf0d486bbfce94c62 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 28 Mar 2024 11:21:47 +0300 Subject: [PATCH 10/22] Add IT test --- .github/workflows/build.yml | 2 +- .../openicf-zip/src/main/resources/bin/openicf.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dce3f76a..ce10308f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,7 +56,7 @@ jobs: net start openicf net stop openicf openicf\bin\ConnectorServer.bat /uninstall openicf - del /f /q openicf\logs + del /F /S /Q openicf\logs cmd /c "START /b openicf\bin\ConnectorServer.bat /run" - name: Upload failure artifacts uses: actions/upload-artifact@v4 diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh index 06a00d8a..8cb6daed 100644 --- a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh +++ b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh @@ -13,10 +13,11 @@ NAME="openicf" DESC="OpenICF Connector Server" # The path to Jsvc -EXEC="$(whereis -q jsvc)" +EXEC="$(which jsvc)" if [ ! -f "$EXEC" ]; then echo "Could not find jsvc on path $EXEC" 1>&2 echo "Ubuntu: sudo apt-get install jsvc" 1>&2 + echo "Centos: sudo yum install apache-commons-daemon-jsvc" 1>&2 echo "Mac: brew install jsvc" 1>&2 exit 1 fi From 618c1e833373c6bf3d00b83f7175f308ec4687fe Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 28 Mar 2024 12:14:32 +0300 Subject: [PATCH 11/22] Add IT test --- .github/workflows/build.yml | 2 +- .../openicf-zip/src/main/resources/bin/openicf.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ce10308f..f23ed39c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -56,7 +56,7 @@ jobs: net start openicf net stop openicf openicf\bin\ConnectorServer.bat /uninstall openicf - del /F /S /Q openicf\logs + Remove-Item -Path openicf\logs -Force -Recurse cmd /c "START /b openicf\bin\ConnectorServer.bat /run" - name: Upload failure artifacts uses: actions/upload-artifact@v4 diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh index 8cb6daed..fd3c6449 100644 --- a/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh +++ b/OpenICF-java-framework/openicf-zip/src/main/resources/bin/openicf.sh @@ -33,7 +33,7 @@ if [ -z "$JAVA_HOME" ] ; then OSTYPE=$(uname) if [[ "$OSTYPE" == "linux-gnu" ]]; then # Linux - JAVA_HOME="/usr/lib/jvm/default-java" + JAVA_HOME="$(readlink -f $(type -P java))" elif [[ "$OSTYPE" == "darwin"* ]]; then # Mac JAVA_HOME=$(/usr/libexec/java_home) From 49b90f87927909327b1345c685f46f2dd9bc0d25 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 28 Mar 2024 12:53:48 +0300 Subject: [PATCH 12/22] Add IT test --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f23ed39c..59cab520 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -47,6 +47,7 @@ jobs: openicf/bin/openicf.sh stop rm -rf openicf/logs openicf/bin/ConnectorServer.sh /run & + timeout 2m bash -c 'grep -q "ConnectorServer listening on" openicf/logs/ConnectorServer.log ; do sleep 5; done' - name: Test on Windows if: runner.os == 'Windows' run: | @@ -58,6 +59,8 @@ jobs: openicf\bin\ConnectorServer.bat /uninstall openicf Remove-Item -Path openicf\logs -Force -Recurse cmd /c "START /b openicf\bin\ConnectorServer.bat /run" + timeout /t 15 /nobreak + findstr "ConnectorServer listening on" openicf\logs\ConnectorServer.log - name: Upload failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() }} From e6a0f8152ab40a04c447c022a3da2a182487d5ab Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 28 Mar 2024 13:22:15 +0300 Subject: [PATCH 13/22] Add IT test --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 59cab520..f24d9733 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -47,7 +47,7 @@ jobs: openicf/bin/openicf.sh stop rm -rf openicf/logs openicf/bin/ConnectorServer.sh /run & - timeout 2m bash -c 'grep -q "ConnectorServer listening on" openicf/logs/ConnectorServer.log ; do sleep 5; done' + timeout 2m bash -c 'until grep -q "ConnectorServer listening on" openicf/logs/ConnectorServer.log ; do sleep 5; done' - name: Test on Windows if: runner.os == 'Windows' run: | @@ -59,7 +59,7 @@ jobs: openicf\bin\ConnectorServer.bat /uninstall openicf Remove-Item -Path openicf\logs -Force -Recurse cmd /c "START /b openicf\bin\ConnectorServer.bat /run" - timeout /t 15 /nobreak + Start-Sleep -s 15 findstr "ConnectorServer listening on" openicf\logs\ConnectorServer.log - name: Upload failure artifacts uses: actions/upload-artifact@v4 From 5cebda2d02cd00076d1d0882fb8e142f559f7ccf Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Thu, 28 Mar 2024 14:44:07 +0300 Subject: [PATCH 14/22] Add IT test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f24d9733..9d4bb626 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -39,7 +39,7 @@ jobs: if [ "$RUNNER_OS" == "Linux" ]; then sudo apt-get install jsvc else - brew install jsvc + brew install coreutils jsvc fi unzip OpenICF-java-framework/openicf-zip/target/openicf-*.zip openicf/bin/ConnectorServer.sh From 7bdb66367f265d757f3d765b1bfff7be57d98153 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Fri, 29 Mar 2024 19:51:30 +0300 Subject: [PATCH 15/22] Add IT test --- .github/workflows/build.yml | 4 ++ .../local/LocalConnectorInfoManagerImpl.java | 18 +++--- OpenICF-java-framework/openicf-zip/pom.xml | 64 +++++++++++++++++++ .../openicf-zip/src/assembly/zip.xml | 19 +++++- .../main/resources/lib/framework/logback.xml | 17 ----- OpenICF-java-framework/pom.xml | 4 +- OpenICF-ssh-connector/pom.xml | 12 ---- pom.xml | 10 +++ 8 files changed, 106 insertions(+), 42 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9d4bb626..2b55a8ad 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,6 +48,8 @@ jobs: rm -rf openicf/logs openicf/bin/ConnectorServer.sh /run & timeout 2m bash -c 'until grep -q "ConnectorServer listening on" openicf/logs/ConnectorServer.log ; do sleep 5; done' + grep -q " ERROR " openicf/logs/ConnectorServer.log + grep -q " ERROR " openicf/logs/ConnectorServer.log | wc -l | grep -q 0 - name: Test on Windows if: runner.os == 'Windows' run: | @@ -61,6 +63,8 @@ jobs: cmd /c "START /b openicf\bin\ConnectorServer.bat /run" Start-Sleep -s 15 findstr "ConnectorServer listening on" openicf\logs\ConnectorServer.log + findstr " ERROR " openicf\logs\ConnectorServer.log + findstr " ERROR " openicf\logs\ConnectorServer.log | find /c 'ERROR' | findstr "0" - name: Upload failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() }} diff --git a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/LocalConnectorInfoManagerImpl.java b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/LocalConnectorInfoManagerImpl.java index 3989c5ee..34aa3b37 100644 --- a/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/LocalConnectorInfoManagerImpl.java +++ b/OpenICF-java-framework/connector-framework-internal/src/main/java/org/identityconnectors/framework/impl/api/local/LocalConnectorInfoManagerImpl.java @@ -258,10 +258,10 @@ public static List createConnectorInfo( // it might be from a bundle // fragment ( a bundle only included by other bundles ). // However, we should definitely warn - LOG.info(LOG.isOk() ? + LOG.error(LOG.isOk() ? e : null, - "Unable to load class {0} from bundle {1}. Class will be ignored and will not be listed in list of connectors.", - className, bundleInfo.getOriginalLocation()); + "Unable to load class {0} from bundle {1}. Class will be ignored and will not be listed in list of connectors. {2}", + className, bundleInfo.getOriginalLocation(),e); } if (connectorClass != null && options == null) { for (Annotation annotation: connectorClass.getAnnotations()) { @@ -298,15 +298,15 @@ public static List createConnectorInfo( LOG.info("Add ConnectorInfo {0} to Local Connector Info Manager from {1}", info.getConnectorKey(), bundleInfo.getOriginalLocation()); } catch (final NoClassDefFoundError e) { - LOG.info(LOG.isOk() ? + LOG.error(LOG.isOk() ? e : null, - "Unable to load configuration class of connector {0} from bundle {1}. Class will be ignored and will not be listed in list of connectors.", - connectorClass, bundleInfo.getOriginalLocation()); + "Unable to load configuration class of connector {0} from bundle {1}. Class will be ignored and will not be listed in list of connectors.{2}", + connectorClass, bundleInfo.getOriginalLocation(),e); } catch (final TypeNotPresentException e) { - LOG.info(LOG.isOk() ? + LOG.error(LOG.isOk() ? e : null, - "Unable to load configuration class of connector {0} from bundle {1}. Class will be ignored and will not be listed in list of connectors.", - connectorClass, bundleInfo.getOriginalLocation()); + "Unable to load configuration class of connector {0} from bundle {1}. Class will be ignored and will not be listed in list of connectors. {2}", + connectorClass, bundleInfo.getOriginalLocation(),e); } } } diff --git a/OpenICF-java-framework/openicf-zip/pom.xml b/OpenICF-java-framework/openicf-zip/pom.xml index 9825130d..eb4538ef 100644 --- a/OpenICF-java-framework/openicf-zip/pom.xml +++ b/OpenICF-java-framework/openicf-zip/pom.xml @@ -68,6 +68,70 @@ commons-daemon 1.3.4 + + com.github.cverges + expect4j + 1.9 + + + org.openidentityplatform.commons + json-resource + + + org.openidentityplatform.commons.http-framework + client-apache-async + + + org.apache.tomcat + tomcat-jdbc + 7.0.53 + + + net.sf.supercsv + super-csv + 2.3.1 + + + org.codehaus.groovy.modules.http-builder + http-builder + 0.7.1 + + + + org.openidentityplatform.openicf.connectors + csvfile-connector + ${project.version} + + + org.openidentityplatform.openicf.connectors + databasetable-connector + ${project.version} + + + org.openidentityplatform.openicf.connectors + groovy-connector + ${project.version} + + + org.openidentityplatform.openicf.connectors + kerberos-connector + ${project.version} + + + org.openidentityplatform.openicf.connectors + ldap-connector + ${project.version} + + + org.openidentityplatform.openicf.connectors + ssh-connector + ${project.version} + + + org.openidentityplatform.openicf.connectors + xml-connector + ${project.version} + diff --git a/OpenICF-java-framework/openicf-zip/src/assembly/zip.xml b/OpenICF-java-framework/openicf-zip/src/assembly/zip.xml index 41b9b10a..575a53e0 100644 --- a/OpenICF-java-framework/openicf-zip/src/assembly/zip.xml +++ b/OpenICF-java-framework/openicf-zip/src/assembly/zip.xml @@ -74,12 +74,12 @@ false /openicf/lib/framework - ${artifact.artifactId}.${artifact.extension} + ${artifact.groupId}.${artifact.artifactId}-${artifact.version}.${artifact.extension} org.openidentityplatform.openicf.framework:* org.glassfish.grizzly:* - javax.servlet:javax.servlet-api org.openidentityplatform.commons:* + org.openidentityplatform.commons.http-framework:* com.google.protobuf:* org.bouncycastle:* org.slf4j:* @@ -87,6 +87,21 @@ org.codehaus.groovy:groovy-all com.google.guava:* commons-daemon:* + com.github.cverges:expect4j + org.apache.httpcomponents:* + org.apache.tomcat:* + net.sf.supercsv:* + org.codehaus.groovy.modules.http-builder:* + org.openidentityplatform.openicf.connectors:ssh-connector:jar + org.openidentityplatform.openicf.connectors:groovy-connector:jar + + + + false + /openicf/bundles + ${artifact.groupId}.${artifact.artifactId}-${artifact.version}.${artifact.extension} + + org.openidentityplatform.openicf.connectors:*-connector:jar diff --git a/OpenICF-java-framework/openicf-zip/src/main/resources/lib/framework/logback.xml b/OpenICF-java-framework/openicf-zip/src/main/resources/lib/framework/logback.xml index 52dec0e9..98f606a1 100644 --- a/OpenICF-java-framework/openicf-zip/src/main/resources/lib/framework/logback.xml +++ b/OpenICF-java-framework/openicf-zip/src/main/resources/lib/framework/logback.xml @@ -23,13 +23,9 @@ " Portions Copyrighted [year] [name of copyright owner]" --> - logs/ConnectorServer.log true - - logs/ConnectorServer-%d{yyyyMMdd}.log - %date{"MMM dd, yyyy h:mm:ss a"} %-5level %logger{35}: %msg %n @@ -37,9 +33,6 @@ logs/ConnectorServerTrace.log true - - logs/ConnectorServerTrace-%d{yyyyMMdd}.log - %date{"MMM dd, yyyy h:mm:ss a"} %-5level %logger{35}: %msg %n @@ -47,16 +40,6 @@ logs/Connector.log true - - logs/Connector-%d{yyyyMMdd}.log - - %date{"MMM dd, yyyy h:mm:ss a"} %-5level %logger{35}: %msg %n diff --git a/OpenICF-java-framework/pom.xml b/OpenICF-java-framework/pom.xml index 819a162c..ef6e4a9a 100644 --- a/OpenICF-java-framework/pom.xml +++ b/OpenICF-java-framework/pom.xml @@ -78,8 +78,8 @@ Build-Jdk,Tool - 1.7.12 - 1.1.7 + 1.7.36 + 1.2.13 2.4.21 2.3.35 3.0.2 diff --git a/OpenICF-ssh-connector/pom.xml b/OpenICF-ssh-connector/pom.xml index cd2b1010..876df953 100644 --- a/OpenICF-ssh-connector/pom.xml +++ b/OpenICF-ssh-connector/pom.xml @@ -44,18 +44,6 @@ 1.5 2.0 - - - com.springsource.repository.bundles.release - SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases - https://repository.springsource.com/maven/bundles/release - - - com.springsource.repository.bundles.external - SpringSource Enterprise Bundle Repository - External Bundle Releases - https://repository.springsource.com/maven/bundles/external - - org.openidentityplatform.openicf.framework diff --git a/pom.xml b/pom.xml index 83d910d5..2556a886 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,16 @@ JBoss Nexus Public Repository https://repository.jboss.org/nexus/content/groups/public/ + + com.springsource.repository.bundles.release + SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases + https://repository.springsource.com/maven/bundles/release + + + com.springsource.repository.bundles.external + SpringSource Enterprise Bundle Repository - External Bundle Releases + https://repository.springsource.com/maven/bundles/external + From 7626f75843b58cac1d993a3c3ea9da63edfe6e12 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Fri, 29 Mar 2024 19:59:46 +0300 Subject: [PATCH 16/22] Add IT test --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2b55a8ad..63554942 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,7 +48,7 @@ jobs: rm -rf openicf/logs openicf/bin/ConnectorServer.sh /run & timeout 2m bash -c 'until grep -q "ConnectorServer listening on" openicf/logs/ConnectorServer.log ; do sleep 5; done' - grep -q " ERROR " openicf/logs/ConnectorServer.log + grep -q " ERROR " openicf/logs/ConnectorServer.log || echo "no error" grep -q " ERROR " openicf/logs/ConnectorServer.log | wc -l | grep -q 0 - name: Test on Windows if: runner.os == 'Windows' @@ -63,7 +63,7 @@ jobs: cmd /c "START /b openicf\bin\ConnectorServer.bat /run" Start-Sleep -s 15 findstr "ConnectorServer listening on" openicf\logs\ConnectorServer.log - findstr " ERROR " openicf\logs\ConnectorServer.log + findstr " ERROR " openicf\logs\ConnectorServer.log || echo "no error" findstr " ERROR " openicf\logs\ConnectorServer.log | find /c 'ERROR' | findstr "0" - name: Upload failure artifacts uses: actions/upload-artifact@v4 From b153cf5a45bfefede482faaab7876cdab1b57282 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Mon, 1 Apr 2024 09:56:33 +0300 Subject: [PATCH 17/22] Add IT test --- .github/workflows/build.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 63554942..64ac02de 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,8 +48,7 @@ jobs: rm -rf openicf/logs openicf/bin/ConnectorServer.sh /run & timeout 2m bash -c 'until grep -q "ConnectorServer listening on" openicf/logs/ConnectorServer.log ; do sleep 5; done' - grep -q " ERROR " openicf/logs/ConnectorServer.log || echo "no error" - grep -q " ERROR " openicf/logs/ConnectorServer.log | wc -l | grep -q 0 + grep -q " ERROR " openicf/logs/ConnectorServer.log && echo "log contains errors" && $(exit 1) - name: Test on Windows if: runner.os == 'Windows' run: | @@ -63,8 +62,7 @@ jobs: cmd /c "START /b openicf\bin\ConnectorServer.bat /run" Start-Sleep -s 15 findstr "ConnectorServer listening on" openicf\logs\ConnectorServer.log - findstr " ERROR " openicf\logs\ConnectorServer.log || echo "no error" - findstr " ERROR " openicf\logs\ConnectorServer.log | find /c 'ERROR' | findstr "0" + findstr " ERROR " openicf\logs\ConnectorServer.log && echo "log contains errors" && assert - name: Upload failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() }} From e9e4a36441c92641950beaead149df8fa8b72457 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Mon, 1 Apr 2024 10:57:38 +0300 Subject: [PATCH 18/22] Add IT test --- .github/workflows/build.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 64ac02de..92acc2a2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,7 +48,8 @@ jobs: rm -rf openicf/logs openicf/bin/ConnectorServer.sh /run & timeout 2m bash -c 'until grep -q "ConnectorServer listening on" openicf/logs/ConnectorServer.log ; do sleep 5; done' - grep -q " ERROR " openicf/logs/ConnectorServer.log && echo "log contains errors" && $(exit 1) + grep " ERROR " openicf/logs/ConnectorServer.log || echo "no error" + grep " ERROR " openicf/logs/ConnectorServer.log | wc -l | grep -q 0 - name: Test on Windows if: runner.os == 'Windows' run: | @@ -62,7 +63,8 @@ jobs: cmd /c "START /b openicf\bin\ConnectorServer.bat /run" Start-Sleep -s 15 findstr "ConnectorServer listening on" openicf\logs\ConnectorServer.log - findstr " ERROR " openicf\logs\ConnectorServer.log && echo "log contains errors" && assert + findstr " ERROR " openicf\logs\ConnectorServer.log || echo "no error" + findstr " ERROR " openicf\logs\ConnectorServer.log | find /c 'ERROR' | findstr "0" - name: Upload failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() }} From 615b690fd6f9b2394729a8424ef7652dc39d35d1 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Mon, 1 Apr 2024 11:35:08 +0300 Subject: [PATCH 19/22] Add IT test --- .github/workflows/build.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 92acc2a2..518ec30a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -48,8 +48,7 @@ jobs: rm -rf openicf/logs openicf/bin/ConnectorServer.sh /run & timeout 2m bash -c 'until grep -q "ConnectorServer listening on" openicf/logs/ConnectorServer.log ; do sleep 5; done' - grep " ERROR " openicf/logs/ConnectorServer.log || echo "no error" - grep " ERROR " openicf/logs/ConnectorServer.log | wc -l | grep -q 0 + ! grep " ERROR " openicf/logs/ConnectorServer.log - name: Test on Windows if: runner.os == 'Windows' run: | @@ -63,8 +62,7 @@ jobs: cmd /c "START /b openicf\bin\ConnectorServer.bat /run" Start-Sleep -s 15 findstr "ConnectorServer listening on" openicf\logs\ConnectorServer.log - findstr " ERROR " openicf\logs\ConnectorServer.log || echo "no error" - findstr " ERROR " openicf\logs\ConnectorServer.log | find /c 'ERROR' | findstr "0" + findstr " ERROR " openicf\logs\ConnectorServer.log || if %ERRORLEVEL% EQU 1 (echo "no error") else assertError - name: Upload failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() }} From cb90e8d86c50f32a0ddb73034c6ad587c7c61026 Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Mon, 1 Apr 2024 11:50:00 +0300 Subject: [PATCH 20/22] Add IT test --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 518ec30a..c04e74ac 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -62,7 +62,8 @@ jobs: cmd /c "START /b openicf\bin\ConnectorServer.bat /run" Start-Sleep -s 15 findstr "ConnectorServer listening on" openicf\logs\ConnectorServer.log - findstr " ERROR " openicf\logs\ConnectorServer.log || if %ERRORLEVEL% EQU 1 (echo "no error") else assertError + findstr " ERROR " openicf\logs\ConnectorServer.log || echo "no error" + findstr " ERROR " openicf\logs\ConnectorServer.log | find /c "ERROR" | findstr "0" - name: Upload failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() }} From 2249495c34af0524f54b56d115729177898e74ed Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Mon, 1 Apr 2024 12:18:39 +0300 Subject: [PATCH 21/22] Add IT test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c04e74ac..8a951290 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -63,7 +63,7 @@ jobs: Start-Sleep -s 15 findstr "ConnectorServer listening on" openicf\logs\ConnectorServer.log findstr " ERROR " openicf\logs\ConnectorServer.log || echo "no error" - findstr " ERROR " openicf\logs\ConnectorServer.log | find /c "ERROR" | findstr "0" + findstr " ERROR " openicf\logs\ConnectorServer.log | find /c '"ERROR"' | findstr "0" - name: Upload failure artifacts uses: actions/upload-artifact@v4 if: ${{ failure() }} From 424c6afd5d9bf510e2a073a20d4821e095c02c0d Mon Sep 17 00:00:00 2001 From: Valera V Harseko Date: Mon, 1 Apr 2024 12:34:31 +0300 Subject: [PATCH 22/22] Add IT test --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8a951290..dfc78a79 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -62,7 +62,6 @@ jobs: cmd /c "START /b openicf\bin\ConnectorServer.bat /run" Start-Sleep -s 15 findstr "ConnectorServer listening on" openicf\logs\ConnectorServer.log - findstr " ERROR " openicf\logs\ConnectorServer.log || echo "no error" findstr " ERROR " openicf\logs\ConnectorServer.log | find /c '"ERROR"' | findstr "0" - name: Upload failure artifacts uses: actions/upload-artifact@v4