Bug 2268: Use streaming for Modification payload
[controller.git] / opendaylight / md-sal / sal-distributed-datastore / src / test / java / org / opendaylight / controller / programs / appendentries / Client.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.programs.appendentries;
10
11 import akka.actor.ActorSelection;
12 import akka.actor.ActorSystem;
13 import akka.actor.Props;
14 import akka.actor.UntypedActor;
15 import com.typesafe.config.ConfigFactory;
16 import java.util.ArrayList;
17 import java.util.List;
18 import org.opendaylight.controller.cluster.datastore.modification.MutableCompositeModification;
19 import org.opendaylight.controller.cluster.datastore.modification.WriteModification;
20 import org.opendaylight.controller.cluster.example.messages.KeyValue;
21 import org.opendaylight.controller.cluster.raft.ReplicatedLogEntry;
22 import org.opendaylight.controller.cluster.raft.messages.AppendEntries;
23 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.CompositeModificationByteStringPayload;
24 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.CompositeModificationPayload;
25 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
26 import org.opendaylight.controller.md.cluster.datastore.model.TestModel;
27 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
28
29 public class Client {
30
31     private static ActorSystem actorSystem;
32
33     public static class ClientActor extends UntypedActor {
34
35         @Override public void onReceive(Object message) throws Exception {
36
37         }
38     }
39
40     public static void main(String[] args){
41         actorSystem = ActorSystem.create("appendentries", ConfigFactory
42             .load().getConfig("ODLCluster"));
43
44         ActorSelection actorSelection = actorSystem.actorSelection(
45             "akka.tcp://appendentries@127.0.0.1:2550/user/server");
46
47         AppendEntries appendEntries = modificationAppendEntries();
48
49         Payload data = appendEntries.getEntries().get(0).getData();
50         if(data instanceof CompositeModificationPayload) {
51             System.out.println(
52                 "Sending : " + ((CompositeModificationPayload) data)
53                     .getModification());
54         } else {
55             System.out.println(
56                 "Sending : " + ((KeyValue) data)
57                     .getKey());
58
59         }
60
61         actorSelection.tell(appendEntries.toSerializable(), null);
62
63
64
65
66         actorSystem.actorOf(Props.create(ClientActor.class), "client");
67     }
68
69     public static AppendEntries modificationAppendEntries() {
70         List<ReplicatedLogEntry> modification = new ArrayList<>();
71
72         modification.add(0, new ReplicatedLogEntry() {
73             @Override public Payload getData() {
74                 WriteModification writeModification =
75                     new WriteModification(TestModel.TEST_PATH, ImmutableNodes
76                         .containerNode(TestModel.TEST_QNAME));
77
78                 MutableCompositeModification compositeModification =
79                     new MutableCompositeModification();
80
81                 compositeModification.addModification(writeModification);
82
83                 return new CompositeModificationByteStringPayload(
84                     compositeModification.toSerializable());
85             }
86
87             @Override public long getTerm() {
88                 return 1;
89             }
90
91             @Override public long getIndex() {
92                 return 1;
93             }
94
95             @Override
96             public int size() {
97                 return getData().size();
98             }
99         });
100
101         return new AppendEntries(1, "member-1", 0, 100, modification, 1);
102     }
103
104     public static AppendEntries keyValueAppendEntries() {
105         List<ReplicatedLogEntry> modification = new ArrayList<>();
106
107         modification.add(0, new ReplicatedLogEntry() {
108             @Override public Payload getData() {
109                 return new KeyValue("moiz", "test");
110             }
111
112             @Override public long getTerm() {
113                 return 1;
114             }
115
116             @Override public long getIndex() {
117                 return 1;
118             }
119
120             @Override
121             public int size() {
122                 return getData().size();
123             }
124         });
125
126         return new AppendEntries(1, "member-1", 0, 100, modification, 1);
127     }
128 }