CORE-15541: release ga builds prep (#61)

* CORE-15561: Use Beta versions of the CSDE gradle plugin (#58)

* CORE-15572: deleted stale todo comment (#59)

* CORE-15541: release ga-rc12 prep

* CORE:15541: update combined worker version to RC12

* CORE-15541: release ga build prep

---------

Co-authored-by: Tony Lawson <tony.lawson@r3.com>
This commit is contained in:
christian.n 2023-07-24 11:53:41 +01:00 committed by GitHub
parent bb380544d6
commit 15f1043a39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 34 additions and 423 deletions

View File

@ -32,7 +32,6 @@ allprojects {
cordaDbContainerName = "CSDEpostgresql" cordaDbContainerName = "CSDEpostgresql"
cordaBinDir = "${System.getProperty("user.home")}/.corda/corda5" cordaBinDir = "${System.getProperty("user.home")}/.corda/corda5"
cordaCliBinDir = "${System.getProperty("user.home")}/.corda/cli" cordaCliBinDir = "${System.getProperty("user.home")}/.corda/cli"
cpiUploadTimeout = cpiUploadDefault
} }
// Declare the set of Java compiler options we need to build a CorDapp. // Declare the set of Java compiler options we need to build a CorDapp.
@ -47,22 +46,6 @@ allprojects {
// All dependencies are held in Maven Central // All dependencies are held in Maven Central
mavenLocal() mavenLocal()
mavenCentral() mavenCentral()
// R3 Internal repositories for dev
// Repository provides Corda 5 binaries that implement Corda-API.
// These will be made publicly available.
// Final location to be decided.
// Repository subject to change
maven {
url = "$artifactoryContextUrl/corda-os-maven"
authentication {
basic(BasicAuthentication)
}
credentials {
username = findProperty('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME')
password = findProperty('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD')
}
}
} }
tasks.withType(Test).configureEach { tasks.withType(Test).configureEach {

View File

@ -1,38 +1,32 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
MIIGsDCCBJigAwIBAgIQCK1AsmDSnEyfXs2pvZOu2TANBgkqhkiG9w0BAQwFADBi MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg
RzQwHhcNMjEwNDI5MDAwMDAwWhcNMzYwNDI4MjM1OTU5WjBpMQswCQYDVQQGEwJV RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV
UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRy UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu
dXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExMIIC Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG
IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1bQvQtAorXi3XdU5WRuxiEL1 SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y
M4zrPYGXcMW7xIUmMJ+kjmjYXPXrNCQH4UtP03hD9BfXHtr50tVnGlJPDqFX/IiZ ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If
wZHMgQM+TXAkZLON4gh9NH1MgFcSa0OamfLFOx/y78tHWhOmTLMBICXzENOLsvsI xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV
8IrgnQnAZaf6mIBJNYc9URnokCF4RS6hnyzhGMIazMXuk0lwQjKP+8bqHPNlaJGi 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
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -39,23 +39,16 @@ dependencies {
// The CorDapp uses the slf4j logging framework. Corda-API provides this so we need a 'cordaProvided' declaration. // The CorDapp uses the slf4j logging framework. Corda-API provides this so we need a 'cordaProvided' declaration.
cordaProvided 'org.slf4j:slf4j-api' cordaProvided 'org.slf4j:slf4j-api'
// This are shared so should be here.
// Dependencies Required By Test Tooling
// Todo: these are commented out as the simulator UTXO work has not been merged into Gecko yet.
// testImplementation "net.corda:corda-simulator-api:$simulatorVersion"
// testRuntimeOnly "net.corda:corda-simulator-runtime:$simulatorVersion"
// 3rd party libraries // 3rd party libraries
// Required // Required
testImplementation "org.slf4j:slf4j-simple:2.0.0" testImplementation "org.slf4j:slf4j-simple:2.0.0"
testImplementation "org.junit.jupiter:junit-jupiter:$junitVersion" testImplementation "org.junit.jupiter:junit-jupiter:$junitVersion"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion" testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junitVersion"
// Optional but used by exmaple tests. // Optional but used by example tests.
testImplementation "org.mockito:mockito-core:$mockitoVersion" testImplementation "org.mockito:mockito-core:$mockitoVersion"
testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion" testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion"
testImplementation "org.hamcrest:hamcrest-library:$hamcrestVersion" testImplementation "org.hamcrest:hamcrest-library:$hamcrestVersion"
testImplementation "com.r3.corda.ledger.utxo:contract-testing:$contractTestingVersion"
} }
// The CordApp section. // The CordApp section.

View File

@ -1,158 +0,0 @@
package com.r3.developers.csdetemplate.utxoexample.contracts;
import com.r3.corda.ledger.utxo.testing.ContractTest;
import com.r3.developers.csdetemplate.utxoexample.states.ChatState;
import net.corda.v5.ledger.utxo.Command;
import net.corda.v5.ledger.utxo.StateAndRef;
import net.corda.v5.ledger.utxo.transaction.UtxoSignedTransaction;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.UUID;
import static com.r3.developers.csdetemplate.utxoexample.contracts.ChatContract.*;
import static java.util.Collections.emptyList;
public class ChatContractCreateCommandTest extends ContractTest {
protected ChatState outputChatState = new ChatState(
UUID.randomUUID(),
"aliceChatName",
aliceName,
"aliceChatMessage",
List.of(aliceKey, bobKey)
);
@Test
public void happyPath() {
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(outputChatState)
.addCommand(new ChatContract.Create())
.addSignatories(outputChatState.participants)
.toSignedTransaction();
assertVerifies(transaction);
}
@Test
public void missingCommand() {
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(outputChatState)
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + REQUIRE_SINGLE_COMMAND);
}
@Test
public void shouldNotAcceptUnknownCommand() {
class MyDummyCommand implements Command {
}
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(outputChatState)
.addCommand(new MyDummyCommand())
.addSignatories(outputChatState.participants)
.toSignedTransaction();
assertFailsWith(transaction, UNKNOWN_COMMAND);
}
@Test
public void outputStateCannotHaveZeroParticipants() {
ChatState state = new ChatState(
UUID.randomUUID(),
"myChatName",
aliceName,
"myChatMessage",
emptyList()
);
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(state)
.addCommand(new ChatContract.Create())
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + OUTPUT_STATE_SHOULD_ONLY_HAVE_TWO_PARTICIPANTS);
}
@Test
public void outputStateCannotHaveOneParticipant() {
ChatState state = new ChatState(
UUID.randomUUID(),
"myChatName",
aliceName,
"myChatMessage",
List.of(aliceKey)
);
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(state)
.addCommand(new ChatContract.Create())
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + OUTPUT_STATE_SHOULD_ONLY_HAVE_TWO_PARTICIPANTS);
}
@Test
public void outputStateCannotHaveThreeParticipants() {
ChatState state = new ChatState(
UUID.randomUUID(),
"myChatName",
aliceName,
"myChatMessage",
List.of(aliceKey, bobKey, charlieKey)
);
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(state)
.addCommand(new ChatContract.Create())
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + OUTPUT_STATE_SHOULD_ONLY_HAVE_TWO_PARTICIPANTS);
}
@Test
public void outputStateMustBeSigned() {
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(outputChatState)
.addCommand(new ChatContract.Create())
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + TRANSACTION_SHOULD_BE_SIGNED_BY_ALL_PARTICIPANTS);
}
@Test
public void outputStateCannotBeSignedByOnlyOneParticipant() {
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(outputChatState)
.addCommand(new ChatContract.Create())
.addSignatories(outputChatState.participants.get(0))
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + TRANSACTION_SHOULD_BE_SIGNED_BY_ALL_PARTICIPANTS);
}
@Test
public void shouldNotIncludeInputState() {
happyPath(); // generate an existing state to search for
StateAndRef<ChatState> existingState = getLedgerService().findUnconsumedStatesByType(ChatState.class).get(0); // doesn't matter which as this will fail validation
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addInputState(existingState.getRef())
.addOutputState(outputChatState)
.addCommand(new ChatContract.Create())
.addSignatories(outputChatState.participants)
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + CREATE_COMMAND_SHOULD_HAVE_NO_INPUT_STATES);
}
@Test
public void shouldNotHaveTwoOutputStates() {
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(outputChatState)
.addOutputState(outputChatState)
.addCommand(new ChatContract.Create())
.addSignatories(outputChatState.participants)
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + CREATE_COMMAND_SHOULD_HAVE_ONLY_ONE_OUTPUT_STATE);
}
}

View File

@ -1,175 +0,0 @@
package com.r3.developers.csdetemplate.utxoexample.contracts;
import com.r3.corda.ledger.utxo.testing.ContractTest;
import com.r3.developers.csdetemplate.utxoexample.states.ChatState;
import net.corda.v5.ledger.utxo.StateAndRef;
import net.corda.v5.ledger.utxo.transaction.UtxoSignedTransaction;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.UUID;
import static com.r3.developers.csdetemplate.utxoexample.contracts.ChatContract.*;
public class ChatContractUpdateCommandTest extends ContractTest {
@SuppressWarnings("unchecked")
private StateAndRef<ChatState> createInitialChatState() {
ChatState outputChatState = new ChatContractCreateCommandTest().outputChatState;
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(outputChatState)
.addCommand(new ChatContract.Create())
.addSignatories(outputChatState.participants)
.toSignedTransaction();
transaction.toLedgerTransaction();
return (StateAndRef<ChatState>) transaction.getOutputStateAndRefs().get(0);
}
@Test
public void happyPath() {
StateAndRef<ChatState> existingState = createInitialChatState();
ChatState updatedOutputChatState = existingState.getState().getContractState().updateMessage(bobName, "bobResponse");
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addInputState(existingState.getRef())
.addOutputState(updatedOutputChatState)
.addCommand(new ChatContract.Update())
.addSignatories(updatedOutputChatState.participants)
.toSignedTransaction();
assertVerifies(transaction);
}
@Test
public void shouldNotHaveNoInputState() {
StateAndRef<ChatState> existingState = createInitialChatState();
ChatState updatedOutputChatState = existingState.getState().getContractState().updateMessage(bobName, "bobResponse");
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addOutputState(updatedOutputChatState)
.addCommand(new ChatContract.Update())
.addSignatories(updatedOutputChatState.participants)
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + UPDATE_COMMAND_SHOULD_HAVE_ONLY_ONE_INPUT_STATE);
}
@Test
public void shouldNotHaveTwoInputStates() {
StateAndRef<ChatState> existingState = createInitialChatState();
ChatState updatedOutputChatState = existingState.getState().getContractState().updateMessage(bobName, "bobResponse");
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addInputState(existingState.getRef())
.addInputState(existingState.getRef())
.addOutputState(updatedOutputChatState)
.addCommand(new ChatContract.Update())
.addSignatories(updatedOutputChatState.participants)
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + UPDATE_COMMAND_SHOULD_HAVE_ONLY_ONE_INPUT_STATE);
}
@Test
public void shouldNotHaveTwoOutputStates() {
StateAndRef<ChatState> existingState = createInitialChatState();
ChatState updatedOutputChatState = existingState.getState().getContractState().updateMessage(bobName, "bobResponse");
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addInputState(existingState.getRef())
.addOutputState(updatedOutputChatState)
.addOutputState(updatedOutputChatState)
.addCommand(new ChatContract.Update())
.addSignatories(updatedOutputChatState.participants)
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + UPDATE_COMMAND_SHOULD_HAVE_ONLY_ONE_OUTPUT_STATE);
}
@Test
public void idShouldNotChange() {
StateAndRef<ChatState> existingState = createInitialChatState();
ChatState esDetails = existingState.getState().getContractState();
ChatState updatedOutputChatState = new ChatState(
UUID.randomUUID(),
esDetails.getChatName(),
bobName,
"bobResponse",
esDetails.getParticipants()
);
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addInputState(existingState.getRef())
.addOutputState(updatedOutputChatState)
.addCommand(new ChatContract.Update())
.addSignatories(updatedOutputChatState.participants)
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + UPDATE_COMMAND_ID_SHOULD_NOT_CHANGE);
}
@Test
public void chatNameShouldNotChange() {
StateAndRef<ChatState> existingState = createInitialChatState();
ChatState esDetails = existingState.getState().getContractState();
ChatState updatedOutputChatState = new ChatState(
esDetails.getId(),
"newName",
bobName,
"bobResponse",
esDetails.getParticipants()
);
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addInputState(existingState.getRef())
.addOutputState(updatedOutputChatState)
.addCommand(new ChatContract.Update())
.addSignatories(updatedOutputChatState.participants)
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + UPDATE_COMMAND_CHATNAME_SHOULD_NOT_CHANGE);
}
@Test
public void participantsShouldNotChange() {
StateAndRef<ChatState> existingState = createInitialChatState();
ChatState esDetails = existingState.getState().getContractState();
ChatState updatedOutputChatState = new ChatState(
esDetails.getId(),
esDetails.getChatName(),
bobName,
"bobResponse",
List.of(bobKey, charlieKey)
);
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addInputState(existingState.getRef())
.addOutputState(updatedOutputChatState)
.addCommand(new ChatContract.Update())
.addSignatories(updatedOutputChatState.participants)
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + UPDATE_COMMAND_PARTICIPANTS_SHOULD_NOT_CHANGE);
}
@Test
public void outputStateMustBeSigned() {
StateAndRef<ChatState> existingState = createInitialChatState();
ChatState updatedOutputChatState = existingState.getState().getContractState().updateMessage(bobName, "bobResponse");
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addInputState(existingState.getRef())
.addOutputState(updatedOutputChatState)
.addCommand(new ChatContract.Update())
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + TRANSACTION_SHOULD_BE_SIGNED_BY_ALL_PARTICIPANTS);
}
@Test
public void outputStateCannotBeSignedByOnlyOneParticipant() {
StateAndRef<ChatState> existingState = createInitialChatState();
ChatState updatedOutputChatState = existingState.getState().getContractState().updateMessage(bobName, "bobResponse");
UtxoSignedTransaction transaction = getLedgerService()
.createTransactionBuilder()
.addInputState(existingState.getRef())
.addOutputState(updatedOutputChatState)
.addCommand(new ChatContract.Update())
.addSignatories(updatedOutputChatState.participants.get(0))
.toSignedTransaction();
assertFailsWith(transaction, "Failed requirement: " + TRANSACTION_SHOULD_BE_SIGNED_BY_ALL_PARTICIPANTS);
}
}

View File

@ -2,20 +2,20 @@ kotlin.code.style=official
# Specify the version of the Corda-API to use. # Specify the version of the Corda-API to use.
# This needs to match the version supported by the Corda Cluster the CorDapp will run on. # This needs to match the version supported by the Corda Cluster the CorDapp will run on.
cordaApiVersion=5.0.0.763-Iguana1.0 cordaApiVersion=5.0.0.765
# Specify the version of the notary plugins to use. # Specify the version of the notary plugins to use.
# Currently packaged as part of corda-runtime-os, so should be set to a corda-runtime-os version. # Currently packaged as part of corda-runtime-os, so should be set to a corda-runtime-os version.
cordaNotaryPluginsVersion=5.0.0.0-Iguana1.0 cordaNotaryPluginsVersion=5.0.0.0
# Specify the version of the Combined Worker to use # Specify the version of the Combined Worker to use
combinedWorkerJarVersion=5.0.0.0-Iguana1.0 combinedWorkerJarVersion=5.0.0.0
# Specify the version of the cordapp-cpb and cordapp-cpk plugins # Specify the version of the cordapp-cpb and cordapp-cpk plugins
cordaPluginsVersion=7.0.3 cordaPluginsVersion=7.0.3
# Specify the version of the CSDE gradle plugin to use # Specify the version of the CSDE gradle plugin to use
csdePluginVersion=1.2.0-alpha-+ csdePluginVersion=1.1.0
# Specify the name of the workflows module # Specify the name of the workflows module
workflowsModule=workflows workflowsModule=workflows
@ -34,14 +34,4 @@ kotlin.stdlib.default.dependency=false
junitVersion = 5.8.2 junitVersion = 5.8.2
mockitoKotlinVersion=4.0.0 mockitoKotlinVersion=4.0.0
mockitoVersion=4.6.1 mockitoVersion=4.6.1
hamcrestVersion=2.2 hamcrestVersion=2.2
contractTestingVersion=0.9.0-beta-+
# Specify the maximum amount of time allowed for the CPI upload
# As your CorDapp grows you might need to increase this
# Value is in milliseconds
cpiUploadDefault=10000
# R3 internal repository
# Use this version when pointing to artefacts in artifactory that have not been published to S3
artifactoryContextUrl=https://software.r3.com/artifactory

View File

@ -4,16 +4,6 @@ pluginManagement {
gradlePluginPortal() gradlePluginPortal()
mavenCentral() mavenCentral()
mavenLocal() mavenLocal()
maven {
url = "$artifactoryContextUrl/corda-os-maven"
authentication {
basic(BasicAuthentication)
}
credentials {
username = settings.ext.find('cordaArtifactoryUsername') ?: System.getenv('CORDA_ARTIFACTORY_USERNAME')
password = settings.ext.find('cordaArtifactoryPassword') ?: System.getenv('CORDA_ARTIFACTORY_PASSWORD')
}
}
} }
// The plugin dependencies with versions of the plugins congruent with the specified CorDapp plugin version, // The plugin dependencies with versions of the plugins congruent with the specified CorDapp plugin version,

View File

@ -40,12 +40,6 @@ dependencies {
// The CorDapp uses the slf4j logging framework. Corda-API provides this so we need a 'cordaProvided' declaration. // The CorDapp uses the slf4j logging framework. Corda-API provides this so we need a 'cordaProvided' declaration.
cordaProvided 'org.slf4j:slf4j-api' cordaProvided 'org.slf4j:slf4j-api'
// This are shared so should be here.
// Dependencies Required By Test Tooling
// Todo: these are commented out as the simulator UTXO work has not been merged into Gecko yet.
// testImplementation "net.corda:corda-simulator-api:$simulatorVersion"
// testRuntimeOnly "net.corda:corda-simulator-runtime:$simulatorVersion"
// 3rd party libraries // 3rd party libraries
// Required // Required
testImplementation "org.slf4j:slf4j-simple:2.0.0" testImplementation "org.slf4j:slf4j-simple:2.0.0"