Merge remote-tracking branch 'origin/master'

This commit is contained in:
Roman Mandeleil 2015-01-06 20:53:57 +02:00
commit 0039995aad
9 changed files with 172 additions and 142 deletions

View File

@ -19,6 +19,11 @@ notifications:
on_failure: always
use_notice: true
skip_join: true
slack:
on_success: change
on_failure: always
rooms:
- secure: "Fhaoka5w5XzIZS7ObKfVrnHaVLz7x2Owo1ygb+hXWAHiXpc3Oi1Q6yDOfye/z+Y0Gw8an8v23PIxhLoVZ6JpdurwCXo66dK2TkiNzmEWd6RtYPSZDm6f+0NjPBSOnP5rHmej7RvHeyTY/PQrGPtrHZZQTYD3AuRP1S+tGvtqikA="
# Encrypted values are ORG_GRADLE_PROJECT_bintrayUser and ORG_GRADLE_PROJECT_bintrayKey props for use by Travis when
# authenticating against oss.jfrog.org and/or Bintray repositories. See http://docs.travis-ci.com/user/encryption-keys

View File

@ -59,4 +59,4 @@ Run `../gradlew install`.
#### Publish ethereumj-core builds
Simply push to master, and [the Travis CI build](https://travis-ci.org/ethereum/ethereumj) will take care of the rest. To publish manually instead, just run `../gradlew publish`. Where the artifacts are published depends on the value of the `version` property in the [root build.gradle file](../build.gradle). Snapshots (version values ending in `-SNAPSHOT`) will be published to oss.jfrog.org, while releases will be published to Bintray (and subsequently to JCenter). **You must be a member of the [ethereum Bintray organization](https://bintray.com/ethereum) and you must supply `bintrayUser` and `bintrayKey` properties to the Gradle build in order to authenticate against these repositories**. Configure these properties in your `$HOME/.gradle/gradle.properties` for greatest convenience and security.
Simply push to master, and [the Travis CI build](https://travis-ci.org/ethereum/ethereumj) will take care of the rest. To publish manually instead, just run `../gradlew publish`. Where the artifacts are published depends on the value of the `version` property in the [root build.gradle file](../build.gradle). Snapshots (version values ending in `-SNAPSHOT`) will be published to [oss.jfrog.org](https://oss.jfrog.org/libs-snapshot/org/ethereum/), while releases will be published to [Bintray](https://bintray.com/ethereum/maven/org.ethereum/) (and subsequently to [JCenter](http://jcenter.bintray.com/org/ethereum/)). **You must be a member of the [ethereum Bintray organization](https://bintray.com/ethereum) and you must supply `bintrayUser` and `bintrayKey` properties to the Gradle build in order to authenticate against these repositories**. Configure these properties in your `$HOME/.gradle/gradle.properties` for greatest convenience and security.

View File

@ -1,26 +1,25 @@
buildscript {
repositories {
maven { url 'http://repo.spring.io/plugins-release' }
jcenter()
maven { url 'http://repo.spring.io/plugins-release-local' }
}
dependencies {
classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.6'
}
classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.7'
classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:3.0.1'
}
}
plugins {
id 'application'
id 'jacoco'
id 'maven'
id 'maven-publish'
id 'com.github.johnrengelman.shadow' version '1.2.0'
id 'me.champeau.gradle.antlr4' version '0.1'
id 'com.github.kt3k.coveralls' version '2.0.1x'
id 'com.jfrog.artifactory' version '3.0.1'
id 'com.jfrog.bintray' version '1.0'
}
apply plugin: 'propdeps'
apply plugin: 'propdeps-maven'
apply plugin: 'com.jfrog.artifactory-upload'
sourceCompatibility = 1.7
@ -116,16 +115,6 @@ jacocoTestReport {
}
}
publishing {
publications {
mavenJava(MavenPublication) {
from components.java
artifact sourcesJar
artifact javadocJar
}
}
}
def bintrayUsername = project.hasProperty('bintrayUser') ? project.bintrayUser : ''
def bintrayPassword = project.hasProperty('bintrayKey') ? project.bintrayKey : ''
def pullRequest = System.getenv('TRAVIS_PULL_REQUEST')
@ -138,9 +127,6 @@ artifactory {
username = bintrayUsername
password = bintrayPassword
}
defaults {
publications ('mavenJava')
}
}
resolve {
repository {
@ -158,7 +144,8 @@ bintray {
user = bintrayUsername
key = bintrayPassword
publications = ['mavenJava']
configurations = ['archives']
dryRun = false //Whether to run this as dry-run, without deploying
publish = true //If version should be auto published after an upload
pkg {
@ -172,7 +159,62 @@ bintrayUpload.onlyIf {
(!pullRequest || pullRequest == 'false') && !project.version.endsWith('-SNAPSHOT')
}
publish {
description = "Releases snapshots to oss.jfrog.org and releases to Bintray/JCenter"
install {
repositories.mavenInstaller {
customizePom(pom, project)
}
}
task publish {
description = "Publishes snapshots to oss.jfrog.org and releases to Bintray/JCenter"
dependsOn artifactoryPublish, bintrayUpload
}
def customizePom(pom, gradleProject) {
pom.whenConfigured { generatedPom ->
// eliminate test-scoped dependencies (no need in maven central poms)
generatedPom.dependencies.removeAll { dep ->
dep.scope == "test"
}
// sort to make pom dependencies order consistent to ease comparison of older poms
generatedPom.dependencies = generatedPom.dependencies.sort { dep ->
"$dep.scope:$dep.groupId:$dep.artifactId"
}
// add all items necessary for maven central publication
generatedPom.project {
name = "ethereumj"
description = "Java implementation of the Ethereum protocol"
url = "https://github.com/ethereum/ethereumj"
organization {
name = "Ethereum"
url = "https://ethereum.org"
}
licenses {
license {
name "The MIT License"
url "http://mit-license.org/"
distribution "repo"
}
}
scm {
url = "https://github.com/ethereum/ethereumj"
connection = "scm:git:git://github.com/ethereum/ethereumj"
developerConnection = "scm:git:git://github.com/ethereum/ethereumj"
}
developers {
developer {
id = "rmandeleil"
name = "Roman Mandeleil"
email = "roman.mandeleil@gmail.com"
}
}
issueManagement {
system = "GitHub Issues"
url = "https://github.com/ethereum/ethereumj/issues"
}
}
}
}

View File

@ -1,11 +1,5 @@
package test.ethereum.net;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertFalse;
import java.lang.System;
import org.ethereum.net.message.ReasonCode;
import org.ethereum.net.p2p.DisconnectMessage;
@ -13,7 +7,7 @@ import org.junit.Test;
import org.spongycastle.util.encoders.Hex;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.*;
public class DisconnectMessageTest {
@ -85,12 +79,12 @@ public class DisconnectMessageTest {
String disconnectMessageRaw = "C19999";
byte[] payload = Hex.decode(disconnectMessageRaw);
try{
DisconnectMessage disconnectMessage = new DisconnectMessage(payload);
disconnectMessage.toString(); //throws exception
assertTrue("Valid raw encoding for disconnectMessage", false);
try {
DisconnectMessage disconnectMessage = new DisconnectMessage(payload);
disconnectMessage.toString(); //throws exception
assertTrue("Valid raw encoding for disconnectMessage", false);
} catch (RuntimeException e) {
assertTrue("Invalid raw encoding for disconnectMessage", true);
assertTrue("Invalid raw encoding for disconnectMessage", true);
}
}
@ -100,12 +94,12 @@ public class DisconnectMessageTest {
String disconnectMessageRaw = "C28081";
byte[] payload = Hex.decode(disconnectMessageRaw);
try{
DisconnectMessage disconnectMessage = new DisconnectMessage(payload);
disconnectMessage.toString(); //throws exception
assertTrue("Valid raw encoding for disconnectMessage", false);
try {
DisconnectMessage disconnectMessage = new DisconnectMessage(payload);
disconnectMessage.toString(); //throws exception
assertTrue("Valid raw encoding for disconnectMessage", false);
} catch (RuntimeException e) {
assertTrue("Invalid raw encoding for disconnectMessage", true);
assertTrue("Invalid raw encoding for disconnectMessage", true);
}
}
}

View File

@ -1,11 +1,13 @@
package test.ethereum.net;
import static org.junit.Assert.assertEquals;
import org.ethereum.net.p2p.GetPeersMessage;
import org.ethereum.net.p2p.P2pMessageCodes;
import org.junit.Test;
import org.spongycastle.util.encoders.Hex;
import org.ethereum.net.p2p.P2pMessageCodes;
import org.ethereum.net.p2p.GetPeersMessage;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class GetPeersMessageTest {
@ -13,24 +15,21 @@ public class GetPeersMessageTest {
@Test
public void testGetPeers() {
//Init
GetPeersMessage getPeersMessage = new GetPeersMessage();
//System.out.println(getPeersMessage.getEncoded());
//toString
assertEquals("[GET_PEERS]", getPeersMessage.toString());
//getEncoded
assertEquals("C104", Hex.toHexString( getPeersMessage.getEncoded() ).toUpperCase() );
assertEquals("C104", Hex.toHexString(getPeersMessage.getEncoded()).toUpperCase());
//getAnswerMessage
assertEquals(null, getPeersMessage.getAnswerMessage());
//getCommand
assertEquals(P2pMessageCodes.GET_PEERS, getPeersMessage.getCommand());
}
}

View File

@ -1,17 +1,12 @@
package test.ethereum.net;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
import org.ethereum.net.client.Capability;
import org.ethereum.net.eth.EthHandler;
import org.ethereum.net.p2p.HelloMessage;
import org.ethereum.net.p2p.P2pMessageCodes;
import org.ethereum.net.p2p.P2pHandler;
import org.ethereum.net.p2p.P2pMessageCodes;
import org.ethereum.net.shh.ShhHandler;
import org.junit.Test;
import org.slf4j.Logger;
@ -19,6 +14,9 @@ import org.slf4j.LoggerFactory;
import org.spongycastle.util.encoders.Hex;
import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class HelloMessageTest {
@ -41,12 +39,10 @@ public class HelloMessageTest {
assertEquals(2, helloMessage.getCapabilities().size());
assertEquals(992, helloMessage.getListenPort());
assertEquals(
"1fbf1e41f08078918c9f7b6734594ee56d7f538614f602c71194db0a1af5a77f9b86eb14669fe7a8a46a2dd1b7d070b94e463f4ecd5b337c8b4d31bbf8dd5646",
helloMessage.getPeerId());
"1fbf1e41f08078918c9f7b6734594ee56d7f538614f602c71194db0a1af5a77f9b86eb14669fe7a8a46a2dd1b7d070b94e463f4ecd5b337c8b4d31bbf8dd5646",
helloMessage.getPeerId());
}
//Instantiate from constructor
@Test
public void test2() {
@ -54,9 +50,9 @@ public class HelloMessageTest {
byte version = 2;
String clientStr = "Ethereum(++)/v0.7.9/Release/Linux/g++";
List<Capability> capabilities = Arrays.asList(
new Capability( Capability.ETH, EthHandler.VERSION),
new Capability( Capability.SHH, ShhHandler.VERSION),
new Capability( Capability.P2P, P2pHandler.VERSION) );
new Capability(Capability.ETH, EthHandler.VERSION),
new Capability(Capability.SHH, ShhHandler.VERSION),
new Capability(Capability.P2P, P2pHandler.VERSION));
int listenPort = 992;
String peerId = "1fbf1e41f08078918c9f7b6734594ee56d7f538614f602c71194db0a1af5a";
@ -66,10 +62,10 @@ public class HelloMessageTest {
assertEquals(P2pMessageCodes.HELLO, helloMessage.getCommand());
assertEquals(version, helloMessage.getP2PVersion());
assertEquals(clientStr, helloMessage.getClientId());
assertEquals( 3 , helloMessage.getCapabilities().size());
assertEquals( listenPort , helloMessage.getListenPort());
assertEquals( peerId , helloMessage.getPeerId());
assertEquals(3, helloMessage.getCapabilities().size());
assertEquals(listenPort, helloMessage.getListenPort());
assertEquals(peerId, helloMessage.getPeerId());
//TODO tostring?
}
@ -80,21 +76,20 @@ public class HelloMessageTest {
byte version = -1; //invalid version
String clientStr = ""; //null id
List<Capability> capabilities = Arrays.asList(
new Capability( null, (byte) 0 ),
new Capability( null, (byte) 0 ),
null, //null here causes NullPointerException when using toString
new Capability( null, (byte) 0 ) ); //encoding null capabilities
new Capability(null, (byte) 0),
new Capability(null, (byte) 0),
null, //null here causes NullPointerException when using toString
new Capability(null, (byte) 0)); //encoding null capabilities
int listenPort = 99999; //invalid port
String peerId = ""; //null id
HelloMessage helloMessage = new HelloMessage(version, clientStr, capabilities, listenPort, peerId);
//logger.info(helloMessage.toString());
assertEquals(P2pMessageCodes.HELLO, helloMessage.getCommand());
assertEquals(version, helloMessage.getP2PVersion());
assertEquals(clientStr, helloMessage.getClientId());
assertEquals( 4 , helloMessage.getCapabilities().size());
assertEquals( listenPort , helloMessage.getListenPort());
assertEquals( peerId , helloMessage.getPeerId());
assertEquals(4, helloMessage.getCapabilities().size());
assertEquals(listenPort, helloMessage.getListenPort());
assertEquals(peerId, helloMessage.getPeerId());
}
}

View File

@ -1,54 +1,57 @@
package test.ethereum.net;
import static org.junit.Assert.assertEquals;
import org.ethereum.net.client.Capability;
import org.ethereum.net.p2p.Peer;
import org.spongycastle.util.encoders.Hex;
import java.net.InetAddress;
import java.util.List;
import java.util.ArrayList;
import org.junit.Test;
import org.spongycastle.util.encoders.Hex;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class PeerTest {
/* PEER */
@Test
public void testPeer() {
//Init
InetAddress address = InetAddress.getLoopbackAddress();
List<Capability> capabilities = new ArrayList<>();
List<Capability> capabilities = new ArrayList<>();
int port = 1010;
String peerId = "1010";
Peer peerCopy = new Peer(address, port, peerId );
Peer peerCopy = new Peer(address, port, peerId);
//Peer
Peer peer = new Peer(address, port, peerId );
Peer peer = new Peer(address, port, peerId);
//getAddress
assertEquals( "127.0.0.1" , peer.getAddress().getHostAddress() );
assertEquals("127.0.0.1", peer.getAddress().getHostAddress());
//getPort
assertEquals( port , peer.getPort() );
assertEquals(port, peer.getPort());
//getPeerId
assertEquals( peerId , peer.getPeerId() );
assertEquals(peerId, peer.getPeerId());
//getCapabilities
assertEquals( capabilities , peer.getCapabilities() );
assertEquals(capabilities, peer.getCapabilities());
//getEncoded
assertEquals("CC847F0000018203F2821010C0", Hex.toHexString( peer.getEncoded() ).toUpperCase() );
assertEquals("CC847F0000018203F2821010C0", Hex.toHexString(peer.getEncoded()).toUpperCase());
//toString
assertEquals("[ip=" + address.getHostAddress() + " port=" + Integer.toString( port ) + " peerId=" + peerId + "]", peer.toString() );
assertEquals("[ip=" + address.getHostAddress() + " port=" + Integer.toString(port) + " peerId=" + peerId + "]", peer.toString());
//equals
assertEquals(true, peer.equals( peerCopy ) );
assertEquals(false, peer.equals( null ) );
assertEquals(true, peer.equals(peerCopy));
assertEquals(false, peer.equals(null));
//hashCode
assertEquals(-1, peer.hashCode());

View File

@ -1,17 +1,5 @@
package test.ethereum.net;
import static org.junit.Assert.assertEquals;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.ethereum.net.client.Capability;
import org.ethereum.net.p2p.GetPeersMessage;
import org.ethereum.net.p2p.P2pMessageCodes;
@ -25,7 +13,14 @@ import org.slf4j.LoggerFactory;
import org.spongycastle.util.encoders.Hex;
import java.net.InetAddress;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import static org.junit.Assert.assertEquals;
@ -66,20 +61,19 @@ public class PeersMessageTest {
peer.getPeerId());
}
@Test /* PeersMessage 1 from constructor */
public void testPeers_2() {
//Init
InetAddress address = InetAddress.getLoopbackAddress();
List<Capability> capabilities = new ArrayList<>();
List<Capability> capabilities = new ArrayList<>();
int port = 112;
String peerId = "36659c3656c488437cceb11abeb9b9fc69b8055144a7e7db3584d03e606083f90e" +
"17a1d3021d674579407cdaaafdfeef485872ab719db9f2b6283f498bb90a71";
"17a1d3021d674579407cdaaafdfeef485872ab719db9f2b6283f498bb90a71";
Set<Peer> peers = new HashSet<>();
peers.add(new Peer(address, port, peerId ));
PeersMessage peersMessage= new PeersMessage(peers);
peers.add(new Peer(address, port, peerId));
PeersMessage peersMessage = new PeersMessage(peers);
logger.info(peersMessage.toString());
assertEquals(1, peersMessage.getPeers().size());
@ -91,7 +85,7 @@ public class PeersMessageTest {
assertEquals("127.0.0.1", peer.getAddress().getHostAddress());
assertEquals(112, peer.getPort());
assertEquals("36659c3656c488437cceb11abeb9b9fc69b8055144a7e7db3584d03e6" +
"06083f90e17a1d3021d674579407cdaaafdfeef485872ab719db9f2b6283f498bb90a71", peer.getPeerId());
"06083f90e17a1d3021d674579407cdaaafdfeef485872ab719db9f2b6283f498bb90a71", peer.getPeerId());
}
@Test /* failing test */
@ -99,16 +93,16 @@ public class PeersMessageTest {
//Init
InetAddress address = InetAddress.getLoopbackAddress();
List<Capability> capabilities = Arrays.asList(
new Capability( null, (byte) 0 ),
null //null here can cause NullPointerException when using toString
); //encoding null capabilities
new Capability(null, (byte) 0),
null //null here can cause NullPointerException when using toString
); //encoding null capabilities
int port = -1; //invalid port
String peerId = ""; //invalid peerid
Set<Peer> peers = new HashSet<>();
peers.add(new Peer(address, port, peerId ));
PeersMessage peersMessage= new PeersMessage(peers);
peers.add(new Peer(address, port, peerId));
PeersMessage peersMessage = new PeersMessage(peers);
logger.info(peersMessage.toString());
assertEquals(1, peersMessage.getPeers().size());
@ -119,6 +113,6 @@ public class PeersMessageTest {
assertEquals(P2pMessageCodes.PEERS, peersMessage.getCommand());
assertEquals("127.0.0.1", peer.getAddress().getHostAddress());
assertEquals(-1, peer.getPort());
assertEquals( "" , peer.getPeerId());
assertEquals("", peer.getPeerId());
}
}

View File

@ -2,8 +2,6 @@ package test.ethereum.net;
import org.ethereum.net.eth.StatusMessage;
import java.math.BigInteger;
import org.junit.Test;
import org.slf4j.Logger;
@ -11,6 +9,8 @@ import org.slf4j.LoggerFactory;
import org.spongycastle.util.encoders.Hex;
import java.math.BigInteger;
import static org.junit.Assert.assertEquals;
public class StatusMessageTest {
@ -35,21 +35,22 @@ public class StatusMessageTest {
}
@Test //from constructor
public void test2(){
public void test2() {
//Init
byte version = 39;
byte netId = 0;
byte[] difficulty = new BigInteger("25c60144", 16).toByteArray();
byte[] bestHash = new BigInteger("832056d3c93ff2739ace7199952e5365aa29f18805be05634c4db125c5340216",16).toByteArray();
byte[] genesisHash = new BigInteger("955f36d073ccb026b78ab3424c15cf966a7563aa270413859f78702b9e8e22cb",16).toByteArray();
byte[] bestHash =
new BigInteger("832056d3c93ff2739ace7199952e5365aa29f18805be05634c4db125c5340216", 16).toByteArray();
byte[] genesisHash =
new BigInteger("955f36d073ccb026b78ab3424c15cf966a7563aa270413859f78702b9e8e22cb", 16).toByteArray();
StatusMessage statusMessage = new StatusMessage(version, netId, difficulty, bestHash, genesisHash);
logger.info(statusMessage.toString());
assertEquals(39, statusMessage.getProtocolVersion());
assertEquals("25c60144",
Hex.toHexString(statusMessage.getTotalDifficulty()));
assertEquals("25c60144", Hex.toHexString(statusMessage.getTotalDifficulty()));
assertEquals("00832056d3c93ff2739ace7199952e5365aa29f18805be05634c4db125c5340216",
Hex.toHexString(statusMessage.getBestHash()));
assertEquals("00955f36d073ccb026b78ab3424c15cf966a7563aa270413859f78702b9e8e22cb",
@ -57,25 +58,22 @@ public class StatusMessageTest {
}
@Test //fail test
public void test3(){
public void test3() {
//Init
byte version = -1; //invalid version
byte netId = -1; //invalid netid
byte[] difficulty = new BigInteger("-1000000", 16).toByteArray(); //negative difficulty
byte[] bestHash = new BigInteger("-100000000000000000000000000",16).toByteArray(); //invalid hash
byte[] genesisHash = new BigInteger("-1000000000000000000000000000000",16).toByteArray(); //invalid hash
byte[] bestHash = new BigInteger("-100000000000000000000000000", 16).toByteArray(); //invalid hash
byte[] genesisHash = new BigInteger("-1000000000000000000000000000000", 16).toByteArray(); //invalid hash
StatusMessage statusMessage = new StatusMessage(version, netId, difficulty, bestHash, genesisHash);
logger.info(statusMessage.toString());
assertEquals(-1, statusMessage.getProtocolVersion());
assertEquals("ff000000",
Hex.toHexString(statusMessage.getTotalDifficulty()));
assertEquals("ff00000000000000000000000000",
Hex.toHexString(statusMessage.getBestHash()));
assertEquals("ff000000000000000000000000000000",
Hex.toHexString(statusMessage.getGenesisHash()));
assertEquals("ff000000", Hex.toHexString(statusMessage.getTotalDifficulty()));
assertEquals("ff00000000000000000000000000", Hex.toHexString(statusMessage.getBestHash()));
assertEquals("ff000000000000000000000000000000", Hex.toHexString(statusMessage.getGenesisHash()));
}
}