diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultLinkInfo.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultLinkInfo.java new file mode 100644 index 0000000000..fa494ca280 --- /dev/null +++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultLinkInfo.java @@ -0,0 +1,190 @@ +/* + * Copyright 2019-present Open Networking Foundation + * + * 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. + */ +package org.onosproject.openstacktelemetry.api; + +import com.google.common.base.MoreObjects; +import com.google.common.base.Objects; + +/** + * Implementation of Link info. + */ +public final class DefaultLinkInfo implements LinkInfo { + + private final String linkId; + private final String srcIp; + private final int srcPort; + private final String dstIp; + private final int dstPort; + private final LinkStatsInfo statsInfo; + private final String protocol; + + // default constructor not intended for invoked outside of this class + private DefaultLinkInfo(String linkId, String srcIp, int srcPort, + String dstIp, int dstPort, + LinkStatsInfo statsInfo, String protocol) { + this.linkId = linkId; + this.srcIp = srcIp; + this.srcPort = srcPort; + this.dstIp = dstIp; + this.dstPort = dstPort; + this.statsInfo = statsInfo; + this.protocol = protocol; + } + + @Override + public String linkId() { + return linkId; + } + + @Override + public String srcIp() { + return srcIp; + } + + @Override + public int srcPort() { + return srcPort; + } + + @Override + public String dstIp() { + return dstIp; + } + + @Override + public int dstPort() { + return dstPort; + } + + @Override + public LinkStatsInfo linkStats() { + return statsInfo; + } + + @Override + public String protocol() { + return protocol; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultLinkInfo that = (DefaultLinkInfo) o; + return srcPort == that.srcPort && + dstPort == that.dstPort && + Objects.equal(linkId, that.linkId) && + Objects.equal(srcIp, that.srcIp) && + Objects.equal(dstIp, that.dstIp) && + Objects.equal(statsInfo, that.statsInfo) && + Objects.equal(protocol, that.protocol); + } + + @Override + public int hashCode() { + return Objects.hashCode(linkId, srcIp, srcPort, dstIp, dstPort, statsInfo, protocol); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("linkId", linkId) + .add("srcIp", srcIp) + .add("srcPort", srcPort) + .add("dstIp", dstIp) + .add("dstPort", dstPort) + .add("statsInfo", statsInfo) + .add("protocol", protocol) + .toString(); + } + + /** + * Obtains a default link info builder object. + * + * @return link info builder object + */ + public static LinkInfo.Builder builder() { + return new DefaultLinkInfo.DefaultBuilder(); + } + + /** + * Builder class of LinkInfo. + */ + public static final class DefaultBuilder implements LinkInfo.Builder { + private String linkId; + private String srcIp; + private int srcPort; + private String dstIp; + private int dstPort; + private LinkStatsInfo linkStats; + private String protocol; + + private DefaultBuilder() { + } + + @Override + public Builder withLinkId(String linkId) { + this.linkId = linkId; + return this; + } + + @Override + public Builder withSrcIp(String srcIp) { + this.srcIp = srcIp; + return this; + } + + @Override + public Builder withSrcPort(int srcPort) { + this.srcPort = srcPort; + return this; + } + + @Override + public Builder withDstIp(String dstIp) { + this.dstIp = dstIp; + return this; + } + + @Override + public Builder withDstPort(int dstPort) { + this.dstPort = dstPort; + return this; + } + + @Override + public Builder withLinkStats(LinkStatsInfo linkStats) { + this.linkStats = linkStats; + return this; + } + + @Override + public Builder withProtocol(String protocol) { + this.protocol = protocol; + return this; + } + + @Override + public DefaultLinkInfo build() { + return new DefaultLinkInfo(linkId, srcIp, srcPort, dstIp, + dstPort, linkStats, protocol); + } + } +} diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultLinkStatsInfo.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultLinkStatsInfo.java new file mode 100644 index 0000000000..8cf0089ce6 --- /dev/null +++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultLinkStatsInfo.java @@ -0,0 +1,189 @@ +/* + * Copyright 2019-present Open Networking Foundation + * + * 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. + */ +package org.onosproject.openstacktelemetry.api; + +import com.google.common.base.MoreObjects; +import com.google.common.base.Objects; + +/** + * Implementation of Link stats info. + */ +public final class DefaultLinkStatsInfo implements LinkStatsInfo { + + private final long txPacket; + private final long rxPacket; + private final long txByte; + private final long rxByte; + private final long txDrop; + private final long rxDrop; + private final long timestamp; + + // private constructor not indented for invoked at outside of this class + private DefaultLinkStatsInfo(long txPacket, long rxPacket, long txByte, + long rxByte, long txDrop, long rxDrop, long timestamp) { + this.txPacket = txPacket; + this.rxPacket = rxPacket; + this.txByte = txByte; + this.rxByte = rxByte; + this.txDrop = txDrop; + this.rxDrop = rxDrop; + this.timestamp = timestamp; + } + + @Override + public long getTxPacket() { + return txPacket; + } + + @Override + public long getRxPacket() { + return rxPacket; + } + + @Override + public long getTxByte() { + return txByte; + } + + @Override + public long getRxByte() { + return rxByte; + } + + @Override + public long getTxDrop() { + return txDrop; + } + + @Override + public long getRxDrop() { + return rxDrop; + } + + @Override + public long getTimestamp() { + return timestamp; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultLinkStatsInfo that = (DefaultLinkStatsInfo) o; + return txPacket == that.txPacket && + rxPacket == that.rxPacket && + txByte == that.txByte && + rxByte == that.rxByte && + txDrop == that.txDrop && + rxDrop == that.rxDrop && + timestamp == that.timestamp; + } + + @Override + public int hashCode() { + return Objects.hashCode(txPacket, rxPacket, txByte, rxByte, txDrop, rxDrop, timestamp); + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("txPacket", txPacket) + .add("rxPacket", rxPacket) + .add("txByte", txByte) + .add("rxByte", rxByte) + .add("txDrop", txDrop) + .add("rxDrop", rxDrop) + .add("timestamp", timestamp) + .toString(); + } + + /** + * Obtains a default link stats info builder object. + * + * @return link stats info builder object + */ + public static LinkStatsInfo.Builder builder() { + return new DefaultLinkStatsInfo.DefaultBuilder(); + } + + /** + * Builder class of LinkStatsInfo. + */ + public static final class DefaultBuilder implements LinkStatsInfo.Builder { + private long txPacket; + private long rxPacket; + private long txByte; + private long rxByte; + private long txDrop; + private long rxDrop; + private long timestamp; + + private DefaultBuilder() { + } + + @Override + public DefaultBuilder withTxPacket(long txPacket) { + this.txPacket = txPacket; + return this; + } + + @Override + public DefaultBuilder withRxPacket(long rxPacket) { + this.rxPacket = rxPacket; + return this; + } + + @Override + public DefaultBuilder withTxByte(long txByte) { + this.txByte = txByte; + return this; + } + + @Override + public DefaultBuilder withRxByte(long rxByte) { + this.rxByte = rxByte; + return this; + } + + @Override + public DefaultBuilder withTxDrop(long txDrop) { + this.txDrop = txDrop; + return this; + } + + @Override + public DefaultBuilder withRxDrop(long rxDrop) { + this.rxDrop = rxDrop; + return this; + } + + @Override + public DefaultBuilder withTimestamp(long timestamp) { + this.timestamp = timestamp; + return this; + } + + @Override + public LinkStatsInfo build() { + return new DefaultLinkStatsInfo(txPacket, rxPacket, txByte, rxByte, + txDrop, rxDrop, timestamp); + } + } +} diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/LinkInfo.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/LinkInfo.java new file mode 100644 index 0000000000..fa30fa5886 --- /dev/null +++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/LinkInfo.java @@ -0,0 +1,140 @@ +/* + * Copyright 2019-present Open Networking Foundation + * + * 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. + */ +package org.onosproject.openstacktelemetry.api; + +/** + * Link info interface. + */ +public interface LinkInfo { + + /** + * Obtains the link identification. + * + * @return link identification + */ + String linkId(); + + /** + * Obtains the source IP. + * + * @return source IP + */ + String srcIp(); + + /** + * Obtains source port number. + * + * @return source port index + */ + int srcPort(); + + /** + * Obtains the destination IP. + * + * @return destination IP + */ + String dstIp(); + + /** + * Obtains destination port number. + * + * @return destination port number + */ + int dstPort(); + + /** + * Obtains link stats. + * + * @return link stats + */ + LinkStatsInfo linkStats(); + + /** + * Obtains protocol (e.g., TCP/UDP/ICMP). + * + * @return protocol + */ + String protocol(); + + /** + * Interface of link info builder. + */ + interface Builder { + + /** + * Sets link identifier. + * + * @param linkId link identifier + * @return builder instance + */ + Builder withLinkId(String linkId); + + /** + * Sets the link source IP. + * + * @param srcIp link source IP + * @return builder instance + */ + Builder withSrcIp(String srcIp); + + /** + * Sets the source port number. + * + * @param srcPort source port number + * @return builder instance + */ + Builder withSrcPort(int srcPort); + + /** + * Sets the link destination IP. + * + * @param dstIp link destination IP + * @return builder instance + */ + Builder withDstIp(String dstIp); + + /** + * Sets the destination port number. + * + * @param dstPort destination port number + * @return builder instance + */ + Builder withDstPort(int dstPort); + + /** + * Sets the link stats. + * + * @param linkStats link stats + * @return builder instance + */ + Builder withLinkStats(LinkStatsInfo linkStats); + + /** + * Sets protocol. + * + * @param protocol protocol + * @return builder instance + */ + Builder withProtocol(String protocol); + + /** + * Creates a LinkInfo instance. + * + * @return LinkInfo instance + */ + DefaultLinkInfo build(); + } +} diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/LinkStatsInfo.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/LinkStatsInfo.java new file mode 100644 index 0000000000..b159c32c57 --- /dev/null +++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/LinkStatsInfo.java @@ -0,0 +1,140 @@ +/* + * Copyright 2019-present Open Networking Foundation + * + * 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. + */ +package org.onosproject.openstacktelemetry.api; + +/** + * Link stats info interface. + */ +public interface LinkStatsInfo { + + /** + * Obtains TX packet count. + * + * @return TX packet count + */ + long getTxPacket(); + + /** + * Obtains RX packet count. + * + * @return RX packet count + */ + long getRxPacket(); + + /** + * Obtains TX byte count. + * + * @return TX byte count + */ + long getTxByte(); + + /** + * Obtains RX byte count. + * + * @return RX byte count + */ + long getRxByte(); + + /** + * Obtains TX drop count. + * + * @return TX drop count + */ + long getTxDrop(); + + /** + * Obtains RX drop count. + * + * @return RX drop count + */ + long getRxDrop(); + + /** + * Obtains timestamp. + * + * @return timestamp + */ + long getTimestamp(); + + /** + * Builder class of LinkStatsInfo. + */ + interface Builder { + + /** + * Sets TX packet count. + * + * @param txPacket TX packet count + * @return builder instance + */ + Builder withTxPacket(long txPacket); + + /** + * Sets RX packet count. + * + * @param rxPacket RX packet count + * @return builder instance + */ + Builder withRxPacket(long rxPacket); + + /** + * Sets TX byte count. + * + * @param txByte TX byte count + * @return builder instance + */ + Builder withTxByte(long txByte); + + /** + * Sets RX byte count. + * + * @param rxByte RX byte count + * @return builder instance + */ + Builder withRxByte(long rxByte); + + /** + * Sets TX drop count. + * + * @param txDrop TX drop count + * @return builder instance + */ + Builder withTxDrop(long txDrop); + + /** + * Sets RX drop count. + * + * @param rxDrop RX drop count + * @return builder instance + */ + Builder withRxDrop(long rxDrop); + + /** + * Sets timestamp. + * + * @param timestamp timestamp + * @return builder instance + */ + Builder withTimestamp(long timestamp); + + /** + * Creates a LinkStatsInfo instance. + * + * @return builder instance + */ + LinkStatsInfo build(); + } +} diff --git a/apps/openstacktelemetry/api/src/test/java/org/onosproject/openstacktelemetry/api/DefaultLinkInfoTest.java b/apps/openstacktelemetry/api/src/test/java/org/onosproject/openstacktelemetry/api/DefaultLinkInfoTest.java new file mode 100644 index 0000000000..2099d614e1 --- /dev/null +++ b/apps/openstacktelemetry/api/src/test/java/org/onosproject/openstacktelemetry/api/DefaultLinkInfoTest.java @@ -0,0 +1,130 @@ +/* + * Copyright 2019-present Open Networking Foundation + * + * 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. + */ +package org.onosproject.openstacktelemetry.api; + +import com.google.common.testing.EqualsTester; +import org.junit.Before; +import org.junit.Test; + +import static junit.framework.TestCase.assertEquals; +import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable; +import static org.onosproject.openstacktelemetry.api.DefaultLinkStatsInfoTest.createLinkStatsInfo1; +import static org.onosproject.openstacktelemetry.api.DefaultLinkStatsInfoTest.createLinkStatsInfo2; + +/** + * Unit tests for DefaultLinkInfo class. + */ +public final class DefaultLinkInfoTest { + + private static final String LINK_ID_1 = "L100"; + private static final String LINK_ID_2 = "L200"; + + private static final String SRC_IP_1 = "10.10.10.1"; + private static final String SRC_IP_2 = "10.10.10.2"; + + private static final int SRC_PORT_1 = 80; + private static final int SRC_PORT_2 = 90; + + private static final String DST_IP_1 = "20.20.20.1"; + private static final String DST_IP_2 = "20.20.20.2"; + + private static final int DST_PORT_1 = 100; + private static final int DST_PORT_2 = 110; + + private static final LinkStatsInfo LINK_STATS_1 = createLinkStatsInfo1(); + private static final LinkStatsInfo LINK_STATS_2 = createLinkStatsInfo2(); + + private static final String PROTOCOL_1 = "TCP"; + private static final String PROTOCOL_2 = "UDP"; + + private LinkInfo info1; + private LinkInfo sameAsInfo1; + private LinkInfo info2; + + /** + * Initial setup for this unit test. + */ + @Before + public void setUp() { + LinkInfo.Builder builder1 = DefaultLinkInfo.builder(); + LinkInfo.Builder builder2 = DefaultLinkInfo.builder(); + LinkInfo.Builder builder3 = DefaultLinkInfo.builder(); + + info1 = builder1 + .withLinkId(LINK_ID_1) + .withSrcIp(SRC_IP_1) + .withSrcPort(SRC_PORT_1) + .withDstIp(DST_IP_1) + .withDstPort(DST_PORT_1) + .withLinkStats(LINK_STATS_1) + .withProtocol(PROTOCOL_1) + .build(); + + sameAsInfo1 = builder2 + .withLinkId(LINK_ID_1) + .withSrcIp(SRC_IP_1) + .withSrcPort(SRC_PORT_1) + .withDstIp(DST_IP_1) + .withDstPort(DST_PORT_1) + .withLinkStats(LINK_STATS_1) + .withProtocol(PROTOCOL_1) + .build(); + + info2 = builder3 + .withLinkId(LINK_ID_2) + .withSrcIp(SRC_IP_2) + .withSrcPort(SRC_PORT_2) + .withDstIp(DST_IP_2) + .withDstPort(DST_PORT_2) + .withLinkStats(LINK_STATS_2) + .withProtocol(PROTOCOL_2) + .build(); + } + + /** + * Tests class immutability. + */ + @Test + public void testImmutability() { + assertThatClassIsImmutable(DefaultLinkInfo.class); + } + + /** + * Tests object equality. + */ + @Test + public void testEquality() { + new EqualsTester() + .addEqualityGroup(info1, sameAsInfo1) + .addEqualityGroup(info2).testEquals(); + } + + /** + * Tests object construction. + */ + @Test + public void testConstruction() { + LinkInfo info = info1; + + assertEquals(LINK_ID_1, info.linkId()); + assertEquals(SRC_IP_1, info.srcIp()); + assertEquals(SRC_PORT_1, info.srcPort()); + assertEquals(DST_IP_1, info.dstIp()); + assertEquals(DST_PORT_1, info.dstPort()); + assertEquals(LINK_STATS_1, info.linkStats()); + assertEquals(PROTOCOL_1, info.protocol()); + } +} diff --git a/apps/openstacktelemetry/api/src/test/java/org/onosproject/openstacktelemetry/api/DefaultLinkStatsInfoTest.java b/apps/openstacktelemetry/api/src/test/java/org/onosproject/openstacktelemetry/api/DefaultLinkStatsInfoTest.java new file mode 100644 index 0000000000..ed736717a8 --- /dev/null +++ b/apps/openstacktelemetry/api/src/test/java/org/onosproject/openstacktelemetry/api/DefaultLinkStatsInfoTest.java @@ -0,0 +1,122 @@ +/* + * Copyright 2019-present Open Networking Foundation + * + * 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. + */ +package org.onosproject.openstacktelemetry.api; + +import com.google.common.testing.EqualsTester; +import org.junit.Before; +import org.junit.Test; + +import static junit.framework.TestCase.assertEquals; +import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable; + +/** + * Unit tests for DefaultLinkStatsInfo class. + */ +public final class DefaultLinkStatsInfoTest { + + private static final long TX_PACKET_1 = 1; + private static final long TX_PACKET_2 = 2; + + private static final long RX_PACKET_1 = 1; + private static final long RX_PACKET_2 = 2; + + private static final long TX_BYTE_1 = 1; + private static final long TX_BYTE_2 = 2; + + private static final long RX_BYTE_1 = 1; + private static final long RX_BYTE_2 = 2; + + private static final long TX_DROP_1 = 1; + private static final long TX_DROP_2 = 2; + + private static final long RX_DROP_1 = 1; + private static final long RX_DROP_2 = 2; + + private static final long TIMESTAMP_1 = 10; + private static final long TIMESTAMP_2 = 20; + + private LinkStatsInfo info1; + private LinkStatsInfo sameAsInfo1; + private LinkStatsInfo info2; + + static LinkStatsInfo createLinkStatsInfo1() { + return DefaultLinkStatsInfo.builder() + .withTxPacket(TX_PACKET_1) + .withRxPacket(RX_PACKET_1) + .withTxByte(TX_BYTE_1) + .withRxByte(RX_BYTE_1) + .withTxDrop(TX_DROP_1) + .withRxDrop(RX_DROP_1) + .withTimestamp(TIMESTAMP_1) + .build(); + } + + static LinkStatsInfo createLinkStatsInfo2() { + return DefaultLinkStatsInfo.builder() + .withTxPacket(TX_PACKET_2) + .withRxPacket(RX_PACKET_2) + .withTxByte(TX_BYTE_2) + .withRxByte(RX_BYTE_2) + .withTxDrop(TX_DROP_2) + .withRxDrop(RX_DROP_2) + .withTimestamp(TIMESTAMP_2) + .build(); + } + + /** + * Initial setup for this unit test. + */ + @Before + public void setUp() { + info1 = createLinkStatsInfo1(); + sameAsInfo1 = createLinkStatsInfo1(); + info2 = createLinkStatsInfo2(); + } + + /** + * Tests class immutability. + */ + @Test + public void testImmutability() { + assertThatClassIsImmutable(DefaultLinkStatsInfo.class); + } + + /** + * Tests object equality. + */ + @Test + public void testEquality() { + new EqualsTester() + .addEqualityGroup(info1, sameAsInfo1) + .addEqualityGroup(info2).testEquals(); + } + + /** + * Tests object construction. + */ + @Test + public void testConstruction() { + LinkStatsInfo info = info1; + + assertEquals(TX_PACKET_1, info.getTxPacket()); + assertEquals(RX_PACKET_1, info.getRxPacket()); + assertEquals(TX_BYTE_1, info.getTxByte()); + assertEquals(RX_BYTE_1, info.getRxByte()); + assertEquals(TX_DROP_1, info.getTxDrop()); + assertEquals(RX_DROP_1, info.getRxDrop()); + assertEquals(TIMESTAMP_1, info.getTimestamp()); + } +}