ONOS-4751-Fix:creating GroupType INDIRECT, multiple bucket(REST API)

Change-Id: Ic8d5a04b8b00ca43bfadbb3019aa5d72e799da6f
diff --git a/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java b/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java
index 119d535..1962e0a 100644
--- a/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/group/DefaultGroupDescription.java
@@ -17,6 +17,7 @@
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkArgument;
 
 import java.util.Objects;
 
@@ -61,6 +62,10 @@
         this.type = checkNotNull(type);
         this.deviceId = checkNotNull(deviceId);
         this.buckets = checkNotNull(buckets);
+        if (this.type == GroupDescription.Type.INDIRECT) {
+            checkArgument(buckets.buckets().size() == 1, "Indirect group " +
+                    "should have only one action bucket");
+       }
         this.appCookie = appCookie;
         this.givenGroupId = groupId;
         this.appId = appId;
diff --git a/core/api/src/test/java/org/onosproject/net/group/DefaultGroupTest.java b/core/api/src/test/java/org/onosproject/net/group/DefaultGroupTest.java
index feb10e8..691852dd 100644
--- a/core/api/src/test/java/org/onosproject/net/group/DefaultGroupTest.java
+++ b/core/api/src/test/java/org/onosproject/net/group/DefaultGroupTest.java
@@ -34,6 +34,8 @@
 public class DefaultGroupTest {
     private final GroupId id1 = new DefaultGroupId(6);
     private final GroupId id2 = new DefaultGroupId(7);
+    private final GroupId id3 = new DefaultGroupId(1234);
+
     private final GroupBucket bucket =
             DefaultGroupBucket.createSelectGroupBucket(
                     DefaultTrafficTreatment.emptyTreatment());
@@ -48,10 +50,16 @@
                     GroupDescription.Type.FAILOVER,
                     groupBuckets);
 
+     private final GroupDescription groupDesc3 =
+            new DefaultGroupDescription(did("3"),
+                    GroupDescription.Type.INDIRECT,
+                    groupBuckets);
+
     DefaultGroup group1 = new DefaultGroup(id1, groupDesc1);
     DefaultGroup sameAsGroup1 = new DefaultGroup(id1, groupDesc1);
     DefaultGroup group2 = new DefaultGroup(id1, groupDesc2);
     DefaultGroup group3 = new DefaultGroup(id2, groupDesc2);
+    DefaultGroup group4 = new DefaultGroup(id3, groupDesc3);
 
     /**
      * Tests for proper operation of equals(), hashCode() and toString() methods.
@@ -62,6 +70,7 @@
                 .addEqualityGroup(group1, sameAsGroup1)
                 .addEqualityGroup(group2)
                 .addEqualityGroup(group3)
+                .addEqualityGroup(group4)
                 .testEquals();
     }
 
@@ -85,7 +94,7 @@
     @Test
     public void checkConstructionWithDid() {
         DefaultGroup group = new DefaultGroup(id2, NetTestTools.did("1"),
-                GroupDescription.Type.INDIRECT, groupBuckets);
+                GroupDescription.Type.ALL, groupBuckets);
         assertThat(group.id(), is(id2));
         assertThat(group.bytes(), is(0L));
         assertThat(group.life(), is(0L));