From f128ac2f11a0875505fd3b4a762a23498e32e5f2 Mon Sep 17 00:00:00 2001 From: Steven Pisarski Date: Wed, 29 Apr 2015 10:04:50 -0600 Subject: [PATCH] Added new constructor. May need to tighten down interfaces in the future. Change-Id: I56bbcc65514f9eb2f7ff9aad804780449968e4fb Signed-off-by: Steven Pisarski --- .../java/org/umu/cops/stack/COPSClientSI.java | 29 ++++++++++++---- .../org/umu/cops/stack/COPSClientSITest.java | 34 +++++++++++++++++++ 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/packetcable-driver/src/main/java/org/umu/cops/stack/COPSClientSI.java b/packetcable-driver/src/main/java/org/umu/cops/stack/COPSClientSI.java index e25fb91..2933329 100644 --- a/packetcable-driver/src/main/java/org/umu/cops/stack/COPSClientSI.java +++ b/packetcable-driver/src/main/java/org/umu/cops/stack/COPSClientSI.java @@ -7,6 +7,7 @@ package org.umu.cops.stack; import org.umu.cops.stack.COPSObjHeader.CNum; +import org.umu.cops.stack.COPSObjHeader.CType; import java.io.IOException; import java.io.OutputStream; @@ -62,6 +63,19 @@ public class COPSClientSI extends COPSObjBase { */ private final COPSData _padding; + /** + * Constructor generally used for sending messages + * @param ctype - the CSIType + * @param data - the data + * @throws java.lang.IllegalArgumentException + */ + public COPSClientSI(final CNum cnum, final CType ctype, final COPSData data) { + /* The CSIType does not map directly to the CType, therefore the hook to map to a CType below is + required to ensure the header value outputs the correct value when streamed + */ + this(new COPSObjHeader(cnum, ctype), data); + } + /** * Constructor generally used for sending messages * @param csitype - the CSIType @@ -84,14 +98,17 @@ public class COPSClientSI extends COPSObjBase { */ protected COPSClientSI(final COPSObjHeader hdr, final COPSData data) { super(hdr); - _csiType = VAL_TO_CSI.get(hdr.getCType().ordinal()); + if (VAL_TO_CSI.get(hdr.getCType().ordinal()) == null) { + // TODO - determine if this is a good default value??? + _csiType = CSIType.NAMED; + } else { + _csiType = VAL_TO_CSI.get(hdr.getCType().ordinal()); + } - if (!hdr.getCNum().equals(CNum.CSI)) - throw new IllegalArgumentException("CNum must be equal to " + CNum.CSI); + if (!hdr.getCNum().equals(CNum.CSI) && !hdr.getCNum().equals(CNum.DEC)) + throw new IllegalArgumentException("CNum must be equal to " + CNum.CSI + " or " + CNum.DEC); if (_csiType == null || _csiType.equals(CSIType.NA)) throw new IllegalArgumentException("Invalid CSIType"); - if (_csiType.ordinal() != hdr.getCType().ordinal()) - throw new IllegalArgumentException("Error mapping CSIType " + _csiType + " to CType" + hdr.getCType()); if (data == null) throw new IllegalArgumentException("Data must not be null"); _data = data; @@ -125,7 +142,7 @@ public class COPSClientSI extends COPSObjBase { @Override public void writeBody(final Socket socket) throws IOException { COPSUtil.writeData(socket, _data.getData(), _data.length()); - COPSUtil.writeData(socket, _padding.getData(), _padding.length()); + if (_padding.length() > 0) COPSUtil.writeData(socket, _padding.getData(), _padding.length()); } @Override diff --git a/packetcable-driver/src/test/java/org/umu/cops/stack/COPSClientSITest.java b/packetcable-driver/src/test/java/org/umu/cops/stack/COPSClientSITest.java index 6f9e7cb..3b67dd7 100644 --- a/packetcable-driver/src/test/java/org/umu/cops/stack/COPSClientSITest.java +++ b/packetcable-driver/src/test/java/org/umu/cops/stack/COPSClientSITest.java @@ -15,6 +15,31 @@ import java.io.ByteArrayOutputStream; */ public class COPSClientSITest { + @Test(expected = IllegalArgumentException.class) + public void nullCNumConstructor1() { + new COPSClientSI(null, CType.CSI, new COPSData()); + } + + @Test(expected = IllegalArgumentException.class) + public void invalidCNumConstructor1() { + new COPSClientSI(CNum.ACCT_TIMER, CType.CSI, new COPSData()); + } + + @Test(expected = IllegalArgumentException.class) + public void nullCTypeConstructor1() { + new COPSClientSI(CNum.DEC, null, new COPSData()); + } + + @Test(expected = IllegalArgumentException.class) + public void invalidCTypeConstructor1() { + new COPSClientSI(CNum.DEC, CType.NA, new COPSData()); + } + + @Test(expected = IllegalArgumentException.class) + public void nullDataConstructor1() { + new COPSClientSI(CNum.DEC, CType.CSI, null); + } + @Test(expected = IllegalArgumentException.class) public void invalidCSItype() { new COPSClientSI(CSIType.NA, new COPSData()); @@ -35,6 +60,15 @@ public class COPSClientSITest { new COPSClientSI(new COPSObjHeader(CNum.ACCT_TIMER, CType.CSI), new COPSData()); } + @Test + public void validConstructor1() { + final COPSClientSI clientSI = new COPSClientSI(CNum.DEC, CType.CSI, new COPSData()); + Assert.assertEquals(CSIType.NAMED, clientSI.getCsiType()); + Assert.assertEquals(CNum.DEC, clientSI.getHeader().getCNum()); + Assert.assertEquals(CType.CSI, clientSI.getHeader().getCType()); + Assert.assertEquals(new COPSData(), clientSI.getData()); + } + @Test public void csiSignaledEmptyData() { final COPSClientSI clientSI = new COPSClientSI(CSIType.SIGNALED, new COPSData()); -- 2.36.6