diff --git a/build.gradle b/build.gradle index 6f75b7389b6..c606108da78 100644 --- a/build.gradle +++ b/build.gradle @@ -228,7 +228,6 @@ allprojects { check('MethodInputParametersMustBeFinal', net.ltgt.gradle.errorprone.CheckSeverity.OFF) check('BannedMethod', net.ltgt.gradle.errorprone.CheckSeverity.OFF) check('ExperimentalCliOptionMustBeCorrectlyDisplayed', net.ltgt.gradle.errorprone.CheckSeverity.OFF) - check('StringCaseLocaleUsage', net.ltgt.gradle.errorprone.CheckSeverity.OFF) // These are experimental checks that we want enabled check('MissingBraces', net.ltgt.gradle.errorprone.CheckSeverity.WARN) diff --git a/data/dataexchange/src/main/java/tech/pegasys/teku/data/SlashingProtectionImporter.java b/data/dataexchange/src/main/java/tech/pegasys/teku/data/SlashingProtectionImporter.java index a48aea77f21..58f8e066669 100644 --- a/data/dataexchange/src/main/java/tech/pegasys/teku/data/SlashingProtectionImporter.java +++ b/data/dataexchange/src/main/java/tech/pegasys/teku/data/SlashingProtectionImporter.java @@ -29,6 +29,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -167,7 +168,8 @@ public Optional updateSigningRecord( private Optional updateLocalRecord( final SigningHistory signingHistory, final Consumer statusConsumer) { - String validatorString = signingHistory.pubkey.toBytes().toUnprefixedHexString().toLowerCase(); + String validatorString = + signingHistory.pubkey.toBytes().toUnprefixedHexString().toLowerCase(Locale.ROOT); final String hexValidatorPubkey = signingHistory.pubkey.toHexString(); statusConsumer.accept("Importing " + validatorString); diff --git a/data/dataexchange/src/main/java/tech/pegasys/teku/data/SlashingProtectionRepairer.java b/data/dataexchange/src/main/java/tech/pegasys/teku/data/SlashingProtectionRepairer.java index 44691bde138..c20360343aa 100644 --- a/data/dataexchange/src/main/java/tech/pegasys/teku/data/SlashingProtectionRepairer.java +++ b/data/dataexchange/src/main/java/tech/pegasys/teku/data/SlashingProtectionRepairer.java @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Optional; import java.util.Set; import tech.pegasys.teku.api.schema.BLSPubKey; @@ -127,7 +128,7 @@ private void writeValidatorSigningRecord( } private String toDisplayString(final BLSPubKey pubkey) { - return pubkey.toBytes().toUnprefixedHexString().toLowerCase(); + return pubkey.toBytes().toUnprefixedHexString().toLowerCase(Locale.ROOT); } private void displayUpdateErrors() { diff --git a/data/provider/src/main/java/tech/pegasys/teku/api/ChainDataProvider.java b/data/provider/src/main/java/tech/pegasys/teku/api/ChainDataProvider.java index f0f994f65f8..f8a2b55f73d 100644 --- a/data/provider/src/main/java/tech/pegasys/teku/api/ChainDataProvider.java +++ b/data/provider/src/main/java/tech/pegasys/teku/api/ChainDataProvider.java @@ -23,6 +23,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; import java.util.List; +import java.util.Locale; import java.util.Optional; import java.util.Set; import java.util.function.Function; @@ -243,7 +244,7 @@ private Optional validatorParameterToIndex( throw new ChainDataUnavailableException(); } - if (validatorParameter.toLowerCase().startsWith("0x")) { + if (validatorParameter.toLowerCase(Locale.ROOT).startsWith("0x")) { final Bytes48 keyBytes = getBytes48FromParameter(validatorParameter); try { return spec.getValidatorIndex(state, BLSPublicKey.fromBytesCompressed(keyBytes)); diff --git a/data/serializer/src/main/java/tech/pegasys/teku/api/schema/Metadata.java b/data/serializer/src/main/java/tech/pegasys/teku/api/schema/Metadata.java index 0c8fed621fd..5454ec14627 100644 --- a/data/serializer/src/main/java/tech/pegasys/teku/api/schema/Metadata.java +++ b/data/serializer/src/main/java/tech/pegasys/teku/api/schema/Metadata.java @@ -19,6 +19,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import io.swagger.v3.oas.annotations.media.Schema; +import java.util.Locale; import java.util.Objects; import tech.pegasys.teku.spec.datastructures.networking.libp2p.rpc.metadata.MetadataMessage; import tech.pegasys.teku.spec.datastructures.networking.libp2p.rpc.metadata.versions.altair.MetadataMessageAltair; @@ -67,14 +68,14 @@ public Metadata( public Metadata(final MetadataMessage metadataMessage) { this.sequenceNumber = metadataMessage.getSeqNumber().toString(); this.attestationSubnetSubscriptions = - metadataMessage.getAttnets().sszSerialize().toHexString().toLowerCase(); + metadataMessage.getAttnets().sszSerialize().toHexString().toLowerCase(Locale.ROOT); if (metadataMessage instanceof MetadataMessageAltair) { this.syncCommitteeSubscriptions = ((MetadataMessageAltair) metadataMessage) .getSyncnets() .sszSerialize() .toHexString() - .toLowerCase(); + .toLowerCase(Locale.ROOT); } else { this.syncCommitteeSubscriptions = null; } diff --git a/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSPubKeySerializer.java b/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSPubKeySerializer.java index c15c8e0d3c9..2bf4d053368 100644 --- a/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSPubKeySerializer.java +++ b/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSPubKeySerializer.java @@ -17,12 +17,13 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +import java.util.Locale; import tech.pegasys.teku.api.schema.BLSPubKey; public class BLSPubKeySerializer extends JsonSerializer { @Override public void serialize(BLSPubKey value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeString(value.toHexString().toLowerCase()); + gen.writeString(value.toHexString().toLowerCase(Locale.ROOT)); } } diff --git a/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSPublicKeySerializer.java b/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSPublicKeySerializer.java index adce839e83a..3875481352b 100644 --- a/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSPublicKeySerializer.java +++ b/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSPublicKeySerializer.java @@ -17,12 +17,13 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +import java.util.Locale; import tech.pegasys.teku.bls.BLSPublicKey; public class BLSPublicKeySerializer extends JsonSerializer { @Override public void serialize(BLSPublicKey value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeString(value.toHexString().toLowerCase()); + gen.writeString(value.toHexString().toLowerCase(Locale.ROOT)); } } diff --git a/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSSignatureSerializer.java b/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSSignatureSerializer.java index 65a303d90cd..d4cc358ed4c 100644 --- a/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSSignatureSerializer.java +++ b/data/serializer/src/main/java/tech/pegasys/teku/provider/BLSSignatureSerializer.java @@ -17,12 +17,13 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +import java.util.Locale; import tech.pegasys.teku.api.schema.BLSSignature; public class BLSSignatureSerializer extends JsonSerializer { @Override public void serialize(BLSSignature value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeString(value.toHexString().toLowerCase()); + gen.writeString(value.toHexString().toLowerCase(Locale.ROOT)); } } diff --git a/data/serializer/src/main/java/tech/pegasys/teku/provider/KZGCommitmentSerializer.java b/data/serializer/src/main/java/tech/pegasys/teku/provider/KZGCommitmentSerializer.java index 0219b8346d2..adbde703010 100644 --- a/data/serializer/src/main/java/tech/pegasys/teku/provider/KZGCommitmentSerializer.java +++ b/data/serializer/src/main/java/tech/pegasys/teku/provider/KZGCommitmentSerializer.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +import java.util.Locale; import tech.pegasys.teku.api.schema.KZGCommitment; public class KZGCommitmentSerializer extends JsonSerializer { @@ -24,6 +25,6 @@ public class KZGCommitmentSerializer extends JsonSerializer { public void serialize( final KZGCommitment value, final JsonGenerator gen, final SerializerProvider serializers) throws IOException { - gen.writeString(value.toHexString().toLowerCase()); + gen.writeString(value.toHexString().toLowerCase(Locale.ROOT)); } } diff --git a/data/serializer/src/main/java/tech/pegasys/teku/provider/SszBitvectorSerializer.java b/data/serializer/src/main/java/tech/pegasys/teku/provider/SszBitvectorSerializer.java index 452ba19e819..bf2a18f063b 100644 --- a/data/serializer/src/main/java/tech/pegasys/teku/provider/SszBitvectorSerializer.java +++ b/data/serializer/src/main/java/tech/pegasys/teku/provider/SszBitvectorSerializer.java @@ -17,12 +17,13 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +import java.util.Locale; import tech.pegasys.teku.infrastructure.ssz.collections.SszBitvector; public class SszBitvectorSerializer extends JsonSerializer { @Override public void serialize(SszBitvector value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeString(value.sszSerialize().toHexString().toLowerCase()); + gen.writeString(value.sszSerialize().toHexString().toLowerCase(Locale.ROOT)); } } diff --git a/data/serializer/src/property-test/java/tech/pegasys/teku/provider/JsonProviderPropertyTest.java b/data/serializer/src/property-test/java/tech/pegasys/teku/provider/JsonProviderPropertyTest.java index de5434e52e8..550e25dfa27 100644 --- a/data/serializer/src/property-test/java/tech/pegasys/teku/provider/JsonProviderPropertyTest.java +++ b/data/serializer/src/property-test/java/tech/pegasys/teku/provider/JsonProviderPropertyTest.java @@ -21,6 +21,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import java.lang.reflect.Constructor; import java.util.Arrays; +import java.util.Locale; import java.util.Map; import net.jqwik.api.ForAll; import net.jqwik.api.Property; @@ -106,7 +107,7 @@ public class JsonProviderPropertyTest { void roundTripBytes32(@ForAll @Size(32) final byte[] value) throws JsonProcessingException { Bytes32 data = Bytes32.wrap(value); String serialized = jsonProvider.objectToJSON(data); - assertEquals(Q + data.toHexString().toLowerCase() + Q, serialized); + assertEquals(Q + data.toHexString().toLowerCase(Locale.ROOT) + Q, serialized); Bytes32 deserialize = jsonProvider.jsonToObject(serialized, Bytes32.class); assertEquals(data, deserialize); } diff --git a/data/serializer/src/test/java/tech/pegasys/teku/provider/JsonProviderTest.java b/data/serializer/src/test/java/tech/pegasys/teku/provider/JsonProviderTest.java index cbd00c2944c..b9a795e70e1 100644 --- a/data/serializer/src/test/java/tech/pegasys/teku/provider/JsonProviderTest.java +++ b/data/serializer/src/test/java/tech/pegasys/teku/provider/JsonProviderTest.java @@ -19,6 +19,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import com.fasterxml.jackson.core.JsonProcessingException; +import java.util.Locale; import org.apache.tuweni.bytes.Bytes; import org.apache.tuweni.bytes.Bytes32; import org.apache.tuweni.units.bigints.UInt256; @@ -40,7 +41,7 @@ class JsonProviderTest { public void bytes32ShouldSerializeToJsonAndBack() throws JsonProcessingException { Bytes32 data = Bytes32.random(); String serialized = jsonProvider.objectToJSON(data); - assertEquals(Q + data.toHexString().toLowerCase() + Q, serialized); + assertEquals(Q + data.toHexString().toLowerCase(Locale.ROOT) + Q, serialized); Bytes32 deserialize = jsonProvider.jsonToObject(serialized, Bytes32.class); assertEquals(data, deserialize); diff --git a/eth-reference-tests/src/referenceTest/java/tech/pegasys/teku/reference/altair/fork/ForkUpgradeTestExecutor.java b/eth-reference-tests/src/referenceTest/java/tech/pegasys/teku/reference/altair/fork/ForkUpgradeTestExecutor.java index 3b5cf86fbda..0bb8c49b64a 100644 --- a/eth-reference-tests/src/referenceTest/java/tech/pegasys/teku/reference/altair/fork/ForkUpgradeTestExecutor.java +++ b/eth-reference-tests/src/referenceTest/java/tech/pegasys/teku/reference/altair/fork/ForkUpgradeTestExecutor.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableMap; +import java.util.Locale; import tech.pegasys.teku.ethtests.finder.TestDefinition; import tech.pegasys.teku.reference.TestDataUtils; import tech.pegasys.teku.reference.TestExecutor; @@ -38,7 +39,7 @@ public class ForkUpgradeTestExecutor implements TestExecutor { @Override public void runTest(final TestDefinition testDefinition) throws Throwable { final MetaData metadata = TestDataUtils.loadYaml(testDefinition, "meta.yaml", MetaData.class); - final String fork = metadata.fork.toUpperCase(); + final String fork = metadata.fork.toUpperCase(Locale.ROOT); final SpecMilestone specMilestone = SpecMilestone.valueOf(fork); processUpgrade(testDefinition, specMilestone); } diff --git a/eth-reference-tests/src/referenceTest/java/tech/pegasys/teku/reference/altair/fork/TransitionTestExecutor.java b/eth-reference-tests/src/referenceTest/java/tech/pegasys/teku/reference/altair/fork/TransitionTestExecutor.java index a6d969e768c..06ec13932df 100644 --- a/eth-reference-tests/src/referenceTest/java/tech/pegasys/teku/reference/altair/fork/TransitionTestExecutor.java +++ b/eth-reference-tests/src/referenceTest/java/tech/pegasys/teku/reference/altair/fork/TransitionTestExecutor.java @@ -17,6 +17,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableMap; +import java.util.Locale; import java.util.Optional; import org.assertj.core.api.Assertions; import tech.pegasys.teku.bls.BLSSignatureVerifier; @@ -45,7 +46,7 @@ public void runTest(final TestDefinition testDefinition) throws Throwable { } private void processUpgrade(final TestDefinition testDefinition, final MetaData metadata) { - final String postFork = metadata.postFork.toUpperCase(); + final String postFork = metadata.postFork.toUpperCase(Locale.ROOT); final SpecMilestone milestone = SpecMilestone.valueOf(postFork); final UInt64 forkEpoch = UInt64.valueOf(metadata.forkEpoch); final SpecConfig config = diff --git a/ethereum/execution-types/src/main/java/tech/pegasys/teku/ethereum/execution/types/Eth1Address.java b/ethereum/execution-types/src/main/java/tech/pegasys/teku/ethereum/execution/types/Eth1Address.java index bed8ef01356..2cb913f9a0f 100644 --- a/ethereum/execution-types/src/main/java/tech/pegasys/teku/ethereum/execution/types/Eth1Address.java +++ b/ethereum/execution-types/src/main/java/tech/pegasys/teku/ethereum/execution/types/Eth1Address.java @@ -17,6 +17,7 @@ import static org.apache.commons.lang3.StringUtils.isMixedCase; import java.nio.charset.StandardCharsets; +import java.util.Locale; import org.apache.tuweni.bytes.Bytes; import tech.pegasys.teku.infrastructure.bytes.Bytes20; import tech.pegasys.teku.infrastructure.crypto.Hash; @@ -75,7 +76,7 @@ public static Eth1Address fromHexString(String value) { * @return The encoded address with mixed-case checksum. */ private static String toChecksumAddress(String value) { - final String address = value.replace("0x", "").toLowerCase(); + final String address = value.replace("0x", "").toLowerCase(Locale.ROOT); final String hashString = Hash.keccak256(Bytes.wrap(address.getBytes(StandardCharsets.US_ASCII))) .toString() diff --git a/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/rest/RestBuilderClientTest.java b/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/rest/RestBuilderClientTest.java index effd37c319b..ee2e0f700a9 100644 --- a/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/rest/RestBuilderClientTest.java +++ b/ethereum/executionclient/src/integration-test/java/tech/pegasys/teku/ethereum/executionclient/rest/RestBuilderClientTest.java @@ -26,6 +26,7 @@ import java.io.UncheckedIOException; import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.util.Locale; import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.function.Consumer; @@ -116,7 +117,7 @@ void setUp(final SpecContext specContext) throws IOException { schemaDefinitions = SchemaDefinitionsBellatrix.required(specContext.getSchemaDefinitions()); signedValidatorRegistrationsRequest = readResource("builder/signedValidatorRegistrations.json"); - final String milestoneFolder = "builder/" + milestone.toString().toLowerCase(); + final String milestoneFolder = "builder/" + milestone.toString().toLowerCase(Locale.ROOT); signedBlindedBlockContainerRequest = readResource(milestoneFolder + "/signedBlindedBlockContainer.json"); signedBuilderBidResponse = readResource(milestoneFolder + "/signedBuilderBid.json"); @@ -332,7 +333,7 @@ void getHeader_wrongFork(final SpecContext specContext) { specContext.assumeCapellaActive(); final String milestoneFolder = - "builder/" + milestone.getPreviousMilestone().toString().toLowerCase(); + "builder/" + milestone.getPreviousMilestone().toString().toLowerCase(Locale.ROOT); signedBuilderBidResponse = readResource(milestoneFolder + "/signedBuilderBid.json"); @@ -551,6 +552,7 @@ private static String readResource(final String resource) { } private static String changeResponseVersion(final String json, final SpecMilestone newVersion) { - return json.replaceFirst("(?<=version\":\\s?\")\\w+", newVersion.toString().toLowerCase()); + return json.replaceFirst( + "(?<=version\":\\s?\")\\w+", newVersion.toString().toLowerCase(Locale.ROOT)); } } diff --git a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/serialization/Bytes20Serializer.java b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/serialization/Bytes20Serializer.java index 55030a193a7..2f245556893 100644 --- a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/serialization/Bytes20Serializer.java +++ b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/serialization/Bytes20Serializer.java @@ -17,12 +17,13 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +import java.util.Locale; import tech.pegasys.teku.infrastructure.bytes.Bytes20; public class Bytes20Serializer extends JsonSerializer { @Override public void serialize(Bytes20 value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeString(value.toHexString().toLowerCase()); + gen.writeString(value.toHexString().toLowerCase(Locale.ROOT)); } } diff --git a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/serialization/BytesSerializer.java b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/serialization/BytesSerializer.java index 7536f18ff2d..b22af025a31 100644 --- a/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/serialization/BytesSerializer.java +++ b/ethereum/executionclient/src/main/java/tech/pegasys/teku/ethereum/executionclient/serialization/BytesSerializer.java @@ -17,12 +17,13 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +import java.util.Locale; import org.apache.tuweni.bytes.Bytes; public class BytesSerializer extends JsonSerializer { @Override public void serialize(Bytes value, JsonGenerator gen, SerializerProvider provider) throws IOException { - gen.writeString(value.toHexString().toLowerCase()); + gen.writeString(value.toHexString().toLowerCase(Locale.ROOT)); } } diff --git a/infrastructure/io/src/testFixtures/java/tech/pegasys/teku/cli/OSUtils.java b/infrastructure/io/src/testFixtures/java/tech/pegasys/teku/cli/OSUtils.java index 5bdd06f6590..f73899e39c7 100644 --- a/infrastructure/io/src/testFixtures/java/tech/pegasys/teku/cli/OSUtils.java +++ b/infrastructure/io/src/testFixtures/java/tech/pegasys/teku/cli/OSUtils.java @@ -22,6 +22,7 @@ import java.nio.file.attribute.PosixFilePermission; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Set; import java.util.stream.Collectors; @@ -29,7 +30,8 @@ public class OSUtils { public static final String CR = System.getProperty("line.separator"); public static final String SLASH = System.getProperty("file.separator"); - public static final boolean IS_WIN = System.getProperty("os.name").toLowerCase().contains("win"); + public static final boolean IS_WIN = + System.getProperty("os.name").toLowerCase(Locale.ROOT).contains("win"); public static String toOSPath(String nixPath) { if (IS_WIN) { diff --git a/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/Bytes20Serializer.java b/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/Bytes20Serializer.java index 8bc9017893f..2e908760388 100644 --- a/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/Bytes20Serializer.java +++ b/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/Bytes20Serializer.java @@ -17,12 +17,13 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +import java.util.Locale; import tech.pegasys.teku.infrastructure.bytes.Bytes20; public class Bytes20Serializer extends JsonSerializer { @Override public void serialize(Bytes20 value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeString(value.toHexString().toLowerCase()); + gen.writeString(value.toHexString().toLowerCase(Locale.ROOT)); } } diff --git a/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/Bytes4Serializer.java b/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/Bytes4Serializer.java index e2f9133f621..c4a432cc77f 100644 --- a/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/Bytes4Serializer.java +++ b/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/Bytes4Serializer.java @@ -17,12 +17,13 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +import java.util.Locale; import tech.pegasys.teku.infrastructure.bytes.Bytes4; public class Bytes4Serializer extends JsonSerializer { @Override public void serialize(Bytes4 value, JsonGenerator gen, SerializerProvider serializers) throws IOException { - gen.writeString(value.toHexString().toLowerCase()); + gen.writeString(value.toHexString().toLowerCase(Locale.ROOT)); } } diff --git a/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/BytesSerializer.java b/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/BytesSerializer.java index e32bc5964f8..583f740eef6 100644 --- a/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/BytesSerializer.java +++ b/infrastructure/jackson/src/main/java/tech/pegasys/teku/infrastructure/jackson/deserializers/bytes/BytesSerializer.java @@ -17,12 +17,13 @@ import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; +import java.util.Locale; import org.apache.tuweni.bytes.Bytes; public class BytesSerializer extends JsonSerializer { @Override public void serialize(Bytes value, JsonGenerator gen, SerializerProvider provider) throws IOException { - gen.writeString(value.toHexString().toLowerCase()); + gen.writeString(value.toHexString().toLowerCase(Locale.ROOT)); } } diff --git a/networking/eth2/src/test/java/tech/pegasys/teku/networking/eth2/rpc/core/RpcResponseEncoderDecoderTest.java b/networking/eth2/src/test/java/tech/pegasys/teku/networking/eth2/rpc/core/RpcResponseEncoderDecoderTest.java index 1d5771cb536..911d78a77cd 100644 --- a/networking/eth2/src/test/java/tech/pegasys/teku/networking/eth2/rpc/core/RpcResponseEncoderDecoderTest.java +++ b/networking/eth2/src/test/java/tech/pegasys/teku/networking/eth2/rpc/core/RpcResponseEncoderDecoderTest.java @@ -17,6 +17,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import io.netty.buffer.ByteBuf; +import java.util.Locale; import org.apache.tuweni.bytes.Bytes; import org.junit.jupiter.api.Test; import tech.pegasys.teku.networking.eth2.rpc.core.encodings.RpcEncoding; @@ -42,7 +43,7 @@ public void shouldEncodeErrorResponse() { final Bytes actual = errorMessageResponseEncoder.encodeErrorResponse(ex); // sanity check that the encoded string is what we expect - assertThat(actual.toHexString().toLowerCase()) + assertThat(actual.toHexString().toLowerCase(Locale.ROOT)) .isEqualTo("0x010bff060000734e61507059010f0000c839768d4261642072657175657374"); // when we then decode the byte stream, the same RpcException that got encoded is raised diff --git a/storage/src/main/java/tech/pegasys/teku/storage/server/network/DatabaseNetwork.java b/storage/src/main/java/tech/pegasys/teku/storage/server/network/DatabaseNetwork.java index d1945d7c8d6..85d7106cb11 100644 --- a/storage/src/main/java/tech/pegasys/teku/storage/server/network/DatabaseNetwork.java +++ b/storage/src/main/java/tech/pegasys/teku/storage/server/network/DatabaseNetwork.java @@ -23,6 +23,7 @@ import com.google.common.annotations.VisibleForTesting; import java.io.File; import java.io.IOException; +import java.util.Locale; import java.util.Objects; import tech.pegasys.teku.ethereum.execution.types.Eth1Address; import tech.pegasys.teku.infrastructure.bytes.Bytes4; @@ -48,8 +49,8 @@ public class DatabaseNetwork { public static DatabaseNetwork init( final File source, Bytes4 forkVersion, Eth1Address depositContract) throws IOException { - final String forkVersionString = forkVersion.toHexString().toLowerCase(); - final String depositContractString = depositContract.toHexString().toLowerCase(); + final String forkVersionString = forkVersion.toHexString().toLowerCase(Locale.ROOT); + final String depositContractString = depositContract.toHexString().toLowerCase(Locale.ROOT); final ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory().disable(WRITE_DOC_START_MARKER)); if (source.exists()) { diff --git a/storage/src/main/java/tech/pegasys/teku/storage/server/rocksdb/RocksDbStats.java b/storage/src/main/java/tech/pegasys/teku/storage/server/rocksdb/RocksDbStats.java index 1a1d0fea90e..6322eceef20 100644 --- a/storage/src/main/java/tech/pegasys/teku/storage/server/rocksdb/RocksDbStats.java +++ b/storage/src/main/java/tech/pegasys/teku/storage/server/rocksdb/RocksDbStats.java @@ -17,6 +17,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Locale; import java.util.function.Supplier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -203,7 +204,7 @@ public void registerMetrics(final RocksDB database) { () -> getLongProperty(database, "rocksdb.cur-size-all-mem-tables")); for (final TickerType ticker : TICKERS) { - final String promCounterName = ticker.name().toLowerCase(); + final String promCounterName = ticker.name().toLowerCase(Locale.ROOT); metricsSystem.createLongGauge( category, promCounterName, @@ -239,7 +240,7 @@ private Collector histogramToCollector( metricCategory.getApplicationPrefix().orElse("") + metricCategory.getName() + "_" - + histogram.name().toLowerCase(); + + histogram.name().toLowerCase(Locale.ROOT); @Override public List collect() { diff --git a/storage/src/test/java/tech/pegasys/teku/storage/server/network/DatabaseNetworkTest.java b/storage/src/test/java/tech/pegasys/teku/storage/server/network/DatabaseNetworkTest.java index 2df4db44b3a..32c9f2b1e5c 100644 --- a/storage/src/test/java/tech/pegasys/teku/storage/server/network/DatabaseNetworkTest.java +++ b/storage/src/test/java/tech/pegasys/teku/storage/server/network/DatabaseNetworkTest.java @@ -19,6 +19,7 @@ import java.io.File; import java.io.IOException; +import java.util.Locale; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import tech.pegasys.teku.ethereum.execution.types.Eth1Address; @@ -39,7 +40,8 @@ public void shouldCreateNetworkFile(@TempDir final File tempDir) throws IOExcept assertThat(DatabaseNetwork.init(networkFile, fork, eth1Address)) .isEqualTo( new DatabaseNetwork( - fork.toHexString().toLowerCase(), eth1Address.toHexString().toLowerCase())); + fork.toHexString().toLowerCase(Locale.ROOT), + eth1Address.toHexString().toLowerCase(Locale.ROOT))); assertThat(networkFile).exists(); } diff --git a/teku/src/main/java/tech/pegasys/teku/cli/converter/LogTypeConverter.java b/teku/src/main/java/tech/pegasys/teku/cli/converter/LogTypeConverter.java index 6e70aa392a6..efe998a9c81 100644 --- a/teku/src/main/java/tech/pegasys/teku/cli/converter/LogTypeConverter.java +++ b/teku/src/main/java/tech/pegasys/teku/cli/converter/LogTypeConverter.java @@ -13,6 +13,7 @@ package tech.pegasys.teku.cli.converter; +import java.util.Locale; import org.apache.logging.log4j.Level; import picocli.CommandLine; import picocli.CommandLine.ITypeConverter; @@ -20,7 +21,7 @@ public class LogTypeConverter implements ITypeConverter { @Override public Level convert(String value) { - switch (value.toUpperCase()) { + switch (value.toUpperCase(Locale.ROOT)) { case "OFF": return Level.OFF; case "FATAL": diff --git a/teku/src/test/java/tech/pegasys/teku/cli/options/Eth2P2PNetworkOptionsTest.java b/teku/src/test/java/tech/pegasys/teku/cli/options/Eth2P2PNetworkOptionsTest.java index a9802294eae..d1143f0057c 100644 --- a/teku/src/test/java/tech/pegasys/teku/cli/options/Eth2P2PNetworkOptionsTest.java +++ b/teku/src/test/java/tech/pegasys/teku/cli/options/Eth2P2PNetworkOptionsTest.java @@ -17,6 +17,7 @@ import java.net.URL; import java.util.List; +import java.util.Locale; import java.util.Optional; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -163,8 +164,8 @@ public void usingNetworkFromUrl() { beaconNodeCommand.parse(new String[] {"--network", url.toString()}); final TekuConfiguration config = getResultingTekuConfiguration(); - assertThat(config.eth2NetworkConfiguration().getConstants().toLowerCase()) - .isEqualToIgnoringWhitespace(url.toString().toLowerCase()); + assertThat(config.eth2NetworkConfiguration().getConstants().toLowerCase(Locale.ROOT)) + .isEqualToIgnoringWhitespace(url.toString().toLowerCase(Locale.ROOT)); assertThat( createConfigBuilder() .eth2NetworkConfig( diff --git a/teku/src/test/java/tech/pegasys/teku/cli/options/LoggingOptionsTest.java b/teku/src/test/java/tech/pegasys/teku/cli/options/LoggingOptionsTest.java index fb518ab6d3b..9494e93e8a1 100644 --- a/teku/src/test/java/tech/pegasys/teku/cli/options/LoggingOptionsTest.java +++ b/teku/src/test/java/tech/pegasys/teku/cli/options/LoggingOptionsTest.java @@ -18,6 +18,7 @@ import static tech.pegasys.teku.cli.OSUtils.SLASH; import static tech.pegasys.teku.infrastructure.logging.LoggingDestination.DEFAULT_BOTH; +import java.util.Locale; import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; @@ -176,7 +177,8 @@ public void loglevel_shouldAcceptValues(String level) { public void loglevel_shouldAcceptValuesMixedCase(String level) { final String[] args = {"--logging", level}; final LoggingConfig config = getLoggingConfigurationFromArguments(args); - assertThat(config.getLogLevel().orElseThrow().toString()).isEqualTo(level.toUpperCase()); + assertThat(config.getLogLevel().orElseThrow().toString()) + .isEqualTo(level.toUpperCase(Locale.ROOT)); } @Test diff --git a/teku/src/test/java/tech/pegasys/teku/cli/subcommand/internal/validator/tools/EncryptedKeystoreWriterTest.java b/teku/src/test/java/tech/pegasys/teku/cli/subcommand/internal/validator/tools/EncryptedKeystoreWriterTest.java index ddd43a34c42..362b57c3438 100644 --- a/teku/src/test/java/tech/pegasys/teku/cli/subcommand/internal/validator/tools/EncryptedKeystoreWriterTest.java +++ b/teku/src/test/java/tech/pegasys/teku/cli/subcommand/internal/validator/tools/EncryptedKeystoreWriterTest.java @@ -16,6 +16,7 @@ import static org.assertj.core.api.Assertions.assertThat; import java.nio.file.Path; +import java.util.Locale; import org.apache.tuweni.bytes.Bytes32; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -89,7 +90,7 @@ private void assertKeyStoreCreatedAndCanBeDecrypted( } private String trimPublicKey(final String publicKey) { - if (publicKey.toLowerCase().startsWith("0x")) { + if (publicKey.toLowerCase(Locale.ROOT).startsWith("0x")) { return publicKey.substring(2, 9); } return publicKey.substring(0, 7); diff --git a/teku/src/test/java/tech/pegasys/teku/cli/subcommand/internal/validator/tools/KeyGeneratorTest.java b/teku/src/test/java/tech/pegasys/teku/cli/subcommand/internal/validator/tools/KeyGeneratorTest.java index b77fd54380b..f2c48694fda 100644 --- a/teku/src/test/java/tech/pegasys/teku/cli/subcommand/internal/validator/tools/KeyGeneratorTest.java +++ b/teku/src/test/java/tech/pegasys/teku/cli/subcommand/internal/validator/tools/KeyGeneratorTest.java @@ -27,6 +27,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; +import java.util.Locale; import java.util.function.Function; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -190,7 +191,8 @@ private void assertEncryptedKeystoresAreCreated( assertKeyStoreFilesExistAndAreEncryptedWithPassword(outputPath); // select only withdrawal files - FilenameFilter withdrawalFilter = (dir, name) -> name.toLowerCase().contains("withdrawal"); + FilenameFilter withdrawalFilter = + (dir, name) -> name.toLowerCase(Locale.ROOT).contains("withdrawal"); // assert that files exist: 1 withdrawal file per validator final File[] withdrawalFiles = outputPath.toFile().listFiles(withdrawalFilter); @@ -198,7 +200,8 @@ private void assertEncryptedKeystoresAreCreated( Arrays.stream(withdrawalFiles).forEach(file -> assertThat(file).isFile()); // select only validator files - FilenameFilter validatorFilter = (dir, name) -> name.toLowerCase().contains("validator"); + FilenameFilter validatorFilter = + (dir, name) -> name.toLowerCase(Locale.ROOT).contains("validator"); // assert that files exist: 1 validator file per validator final File[] validatorFiles = outputPath.toFile().listFiles(validatorFilter); diff --git a/validator/client/src/main/java/tech/pegasys/teku/validator/client/loader/ExternalValidatorSource.java b/validator/client/src/main/java/tech/pegasys/teku/validator/client/loader/ExternalValidatorSource.java index c59189475ba..9b137224f5b 100644 --- a/validator/client/src/main/java/tech/pegasys/teku/validator/client/loader/ExternalValidatorSource.java +++ b/validator/client/src/main/java/tech/pegasys/teku/validator/client/loader/ExternalValidatorSource.java @@ -27,6 +27,7 @@ import java.nio.file.Path; import java.util.Arrays; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; @@ -136,7 +137,7 @@ private List getValidatorFiles() { final Path directory = ValidatorClientService.getManagedRemoteKeyPath(dataDirLayout); final File[] files = - directory.toFile().listFiles((dir, name) -> name.toLowerCase().endsWith("json")); + directory.toFile().listFiles((dir, name) -> name.toLowerCase(Locale.ROOT).endsWith("json")); return files == null ? List.of() : Arrays.asList(files); }