View Javadoc
1   package net.sf.mbus4j.master;
2   
3   /*
4    * #%L
5    * mbus4j-master
6    * %%
7    * Copyright (C) 2009 - 2014 MBus4J
8    * %%
9    * mbus4j - Drivers for the M-Bus protocol - http://mbus4j.sourceforge.net/
10   * Copyright (C) 2009-2014, mbus4j.sf.net, and individual contributors as indicated
11   * by the @authors tag. See the copyright.txt in the distribution for a
12   * full listing of individual contributors.
13   * 
14   * This is free software; you can redistribute it and/or modify it
15   * under the terms of the GNU General Public License as
16   * published by the Free Software Foundation; either version 3 of
17   * the License, or (at your option) any later version.
18   * 
19   * This software is distributed in the hope that it will be useful,
20   * but WITHOUT ANY WARRANTY; without even the implied warranty of
21   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22   * Lesser General Public License for more details.
23   * 
24   * You should have received a copy of the GNU Lesser General Public
25   * License along with this software; if not, write to the Free
26   * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
27   * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
28   * #L%
29   */
30  
31  import java.util.logging.Logger;
32  import net.sf.mbus4j.SlaveStreams;
33  import net.sf.mbus4j.dataframes.MBusMedium;
34  import net.sf.mbus4j.devices.Sender;
35  import net.sf.mbus4j.log.LogUtils;
36  
37  import org.junit.After;
38  import org.junit.AfterClass;
39  import static org.junit.Assert.assertEquals;
40  import static org.junit.Assert.assertTrue;
41  import static org.junit.Assert.fail;
42  
43  import org.junit.Before;
44  import org.junit.BeforeClass;
45  import org.junit.Ignore;
46  import org.junit.Test;
47  
48  /**
49   *
50   * @author arnep@users.sourceforge.net
51   * @version $Id: MasterTest.java 104 2014-02-21 09:31:17Z arnep $
52   */
53  public class MasterTest {
54  
55      @BeforeClass
56      public static void setUpClass()
57              throws Exception {
58      }
59  
60      @AfterClass
61      public static void tearDownClass()
62              throws Exception {
63      }
64  
65      private static Logger log = LogUtils.getMasterLogger();
66      private SlaveStreams slaves;
67      private MBusMaster master;
68  
69      public MasterTest() {
70      }
71  
72      @Before
73      public void setUp()
74              throws Exception {
75          System.out.println("setUp");
76          slaves = new SlaveStreams();
77          master = new MBusMaster();
78          master.setConnection(slaves);
79          master.open();
80      }
81  
82      @After
83      public void tearDown()
84              throws Exception {
85          System.out.println("tearDown");
86          if (master != null) {
87              master.close();
88          }
89          master = null;
90          if (slaves != null) {
91              slaves.close();
92          }
93          slaves = null;
94      }
95  
96      /**
97       * Test of deselectBySecondaryAddress method, of class MBusMaster.
98       */
99      @Test
100     @Ignore
101     public void testDeselectBySecondaryAddress() {
102         System.out.println("deselectBySecondaryAddress");
103         master.deselectBySecondaryAddress();
104         // TODO review the generated test code and remove the default call to fail.
105         fail("The test case is a prototype.");
106     }
107 
108     /*        @Test
109      public void testTest() throws Exception {
110      int value = 0x12FFFFFF;
111      //slabveSelect(value);
112      // wenn Ans == 1 return 1 gefunden
113      // wenn Ans == 0 return nix gefunden
114      int nibblePos;
115      while ((nibblePos = getLeftmostMaskedNibble(value)) >= 0) {
116      for (int i = 0; i <= 9; i++) {
117      int res = exchangeNibbleAtPos(nibblePos, value, i);
118      log.error(String.format("VALUE MASKED: %d 0x%08X", nibblePos, res));
119      }
120      return;
121      }
122 
123 
124 
125      }
126      */
127     /**
128      * Test of widcardSearch method, of class MBusMaster.
129      */
130     @Test(timeout = 60000)
131     @Ignore
132     public void testWidcardSearch()
133             throws Exception {
134         System.out.println("widcardSearch");
135 
136         int bcdMaskedId = 0xFFFFFFFF;
137         short bcdMaskedMan = (short) 0xFFFF;
138         byte bcdMaskedVersion = (byte) 0xFF;
139         byte bcdMaskedMedium = (byte) 0xFF;
140         slaves.respondToRequest("680B0B6853FD52FFFFFFFFFFFFFFFF9A16", "E5E5");
141         slaves.respondToRequest("680B0B6853FD52FFFFFF0FFFFFFFFFAA16", 3);
142         slaves.respondToRequest("680B0B6853FD52FFFFFF1FFFFFFFFFBA16", "E5E5");
143         slaves.respondToRequest("680B0B6853FD52FFFFFF10FFFFFFFFAB16", 3);
144         slaves.respondToRequest("680B0B6853FD52FFFFFF11FFFFFFFFAC16", 3);
145         slaves.respondToRequest("680B0B6853FD52FFFFFF12FFFFFFFFAD16", 3);
146         slaves.respondToRequest("680B0B6853FD52FFFFFF13FFFFFFFFAE16", 3);
147         slaves.respondToRequest("680B0B6853FD52FFFFFF14FFFFFFFFAF16", "E5E5");
148         slaves.respondToRequest("680B0B6853FD52FFFF0F14FFFFFFFFBF16", 3);
149         slaves.respondToRequest("680B0B6853FD52FFFF1F14FFFFFFFFCF16", 3);
150         slaves.respondToRequest("680B0B6853FD52FFFF2F14FFFFFFFFDF16", 3);
151         slaves.respondToRequest("680B0B6853FD52FFFF3F14FFFFFFFFEF16", 3);
152         slaves.respondToRequest("680B0B6853FD52FFFF4F14FFFFFFFFFF16", "E5E5");
153         slaves.respondToRequest("680B0B6853FD52FFFF4014FFFFFFFFF016", 3);
154         slaves.respondToRequest("680B0B6853FD52FFFF4114FFFFFFFFF116", 3);
155         slaves.respondToRequest("680B0B6853FD52FFFF4214FFFFFFFFF216", 3);
156         slaves.respondToRequest("680B0B6853FD52FFFF4314FFFFFFFFF316", 3);
157         slaves.respondToRequest("680B0B6853FD52FFFF4414FFFFFFFFF416", 3);
158         slaves.respondToRequest("680B0B6853FD52FFFF4514FFFFFFFFF516", 3);
159         slaves.respondToRequest("680B0B6853FD52FFFF4614FFFFFFFFF616", 3);
160         slaves.respondToRequest("680B0B6853FD52FFFF4714FFFFFFFFF716", 3);
161         slaves.respondToRequest("680B0B6853FD52FFFF4814FFFFFFFFF816", 3);
162         slaves.respondToRequest("680B0B6853FD52FFFF4914FFFFFFFFF916", "E5E5");
163         slaves.respondToRequest("680B0B6853FD52FF0F4914FFFFFFFF0916", 3);
164         slaves.respondToRequest("680B0B6853FD52FF1F4914FFFFFFFF1916", "E5E5");
165         slaves.respondToRequest("680B0B6853FD52FF104914FFFFFFFF0A16", "E5E5");
166         slaves.respondToRequest("680B0B6853FD520F104914FFFFFFFF1A16", "E5E5");
167         slaves.respondToRequest("680B0B6853FD5200104914FFFFFFFF0B16", 3);
168         slaves.respondToRequest("680B0B6853FD5201104914FFFFFFFF0C16", "E5");
169         slaves.respondToRequest("105BFD5816", "680F0F680801720110491457100106000000005716");
170         slaves.respondToRequest("680B0B6853FD5202104914FFFFFFFF0D16", 3);
171         slaves.respondToRequest("680B0B6853FD5203104914FFFFFFFF0E16", 3);
172         slaves.respondToRequest("680B0B6853FD5204104914FFFFFFFF0F16", 3);
173         slaves.respondToRequest("680B0B6853FD5205104914FFFFFFFF1016", 3);
174         slaves.respondToRequest("680B0B6853FD5206104914FFFFFFFF1116", 3);
175         slaves.respondToRequest("680B0B6853FD5207104914FFFFFFFF1216", 3);
176         slaves.respondToRequest("680B0B6853FD5208104914FFFFFFFF1316", "E5");
177         slaves.respondToRequest("105BFD5816", "680F0F68080172081049146745010600000000A316");
178         slaves.respondToRequest("680B0B6853FD5209104914FFFFFFFF1416", 3);
179         slaves.respondToRequest("680B0B6853FD521F104914FFFFFFFF2A16", 3);
180         slaves.respondToRequest("680B0B6853FD522F104914FFFFFFFF3A16", 3);
181         slaves.respondToRequest("680B0B6853FD523F104914FFFFFFFF4A16", 3);
182         slaves.respondToRequest("680B0B6853FD524F104914FFFFFFFF5A16", 3);
183         slaves.respondToRequest("680B0B6853FD525F104914FFFFFFFF6A16", 3);
184         slaves.respondToRequest("680B0B6853FD526F104914FFFFFFFF7A16", 3);
185         slaves.respondToRequest("680B0B6853FD527F104914FFFFFFFF8A16", 3);
186         slaves.respondToRequest("680B0B6853FD528F104914FFFFFFFF9A16", 3);
187         slaves.respondToRequest("680B0B6853FD529F104914FFFFFFFFAA16", 3);
188         slaves.respondToRequest("680B0B6853FD52FF114914FFFFFFFF0B16", 3);
189         slaves.respondToRequest("680B0B6853FD52FF124914FFFFFFFF0C16", 3);
190         slaves.respondToRequest("680B0B6853FD52FF134914FFFFFFFF0D16", 3);
191         slaves.respondToRequest("680B0B6853FD52FF144914FFFFFFFF0E16", 3);
192         slaves.respondToRequest("680B0B6853FD52FF154914FFFFFFFF0F16", 3);
193         slaves.respondToRequest("680B0B6853FD52FF164914FFFFFFFF1016", 3);
194         slaves.respondToRequest("680B0B6853FD52FF174914FFFFFFFF1116", 3);
195         slaves.respondToRequest("680B0B6853FD52FF184914FFFFFFFF1216", 3);
196         slaves.respondToRequest("680B0B6853FD52FF194914FFFFFFFF1316", 3);
197         slaves.respondToRequest("680B0B6853FD52FF2F4914FFFFFFFF2916", 3);
198         slaves.respondToRequest("680B0B6853FD52FF3F4914FFFFFFFF3916", 3);
199         slaves.respondToRequest("680B0B6853FD52FF4F4914FFFFFFFF4916", 3);
200         slaves.respondToRequest("680B0B6853FD52FF5F4914FFFFFFFF5916", 3);
201         slaves.respondToRequest("680B0B6853FD52FF6F4914FFFFFFFF6916", 3);
202         slaves.respondToRequest("680B0B6853FD52FF7F4914FFFFFFFF7916", 3);
203         slaves.respondToRequest("680B0B6853FD52FF8F4914FFFFFFFF8916", 3);
204         slaves.respondToRequest("680B0B6853FD52FF9F4914FFFFFFFF9916", 3);
205         slaves.respondToRequest("680B0B6853FD52FFFF5F14FFFFFFFF0F16", 3);
206         slaves.respondToRequest("680B0B6853FD52FFFF6F14FFFFFFFF1F16", 3);
207         slaves.respondToRequest("680B0B6853FD52FFFF7F14FFFFFFFF2F16", 3);
208         slaves.respondToRequest("680B0B6853FD52FFFF8F14FFFFFFFF3F16", 3);
209         slaves.respondToRequest("680B0B6853FD52FFFF9F14FFFFFFFF4F16", 3);
210         slaves.respondToRequest("680B0B6853FD52FFFFFF15FFFFFFFFB016", 3);
211         slaves.respondToRequest("680B0B6853FD52FFFFFF16FFFFFFFFB116", 3);
212         slaves.respondToRequest("680B0B6853FD52FFFFFF17FFFFFFFFB216", 3);
213         slaves.respondToRequest("680B0B6853FD52FFFFFF18FFFFFFFFB316", 3);
214         slaves.respondToRequest("680B0B6853FD52FFFFFF19FFFFFFFFB416", 3);
215         slaves.respondToRequest("680B0B6853FD52FFFFFF2FFFFFFFFFCA16", 3);
216         slaves.respondToRequest("680B0B6853FD52FFFFFF3FFFFFFFFFDA16", "E5");
217         slaves.respondToRequest("105BFD5816", "680F0F680801723348103210200102000000006B16");
218         slaves.respondToRequest("680B0B6853FD52FFFFFF4FFFFFFFFFEA16", 3);
219         slaves.respondToRequest("680B0B6853FD52FFFFFF5FFFFFFFFFFA16", 3);
220         slaves.respondToRequest("680B0B6853FD52FFFFFF6FFFFFFFFF0A16", 3);
221         slaves.respondToRequest("680B0B6853FD52FFFFFF7FFFFFFFFF1A16", "E5");
222         slaves.respondToRequest("105BFD5816", "680F0F68080172103254761020010300000000BB16");
223         slaves.respondToRequest("680B0B6853FD52FFFFFF8FFFFFFFFF2A16", 3);
224         slaves.respondToRequest("680B0B6853FD52FFFFFF9FFFFFFFFF3A16", 3);
225         slaves.replay();
226         master.widcardSearch(bcdMaskedId, bcdMaskedMan, bcdMaskedVersion, bcdMaskedMedium, Sender.DEFAULT_SEND_TRIES);
227         assertTrue(slaves.isOK());
228         log.info("widcardSearch finished");
229         assertEquals(4,
230                 master.deviceCount());
231         assertEquals(1,
232                 master.getDevice(0).getAddress());
233         assertEquals(14491001,
234                 master.getDevice(0).getIdentNumber());
235         assertEquals("DBW",
236                 master.getDevice(0).getManufacturer());
237         assertEquals(MBusMedium.HOT_WATER,
238                 master.getDevice(0).getMedium());
239         assertEquals(1,
240                 master.getDevice(0).getVersion());
241         assertEquals(1,
242                 master.getDevice(1).getAddress());
243         assertEquals(14491008,
244                 master.getDevice(1).getIdentNumber());
245         assertEquals("QKG",
246                 master.getDevice(1).getManufacturer());
247         assertEquals(MBusMedium.HOT_WATER,
248                 master.getDevice(1).getMedium());
249         assertEquals(1,
250                 master.getDevice(1).getVersion());
251         assertEquals(1,
252                 master.getDevice(2).getAddress());
253         assertEquals(32104833,
254                 master.getDevice(2).getIdentNumber());
255         assertEquals("H@P",
256                 master.getDevice(2).getManufacturer());
257         assertEquals(MBusMedium.ELECTRICITY,
258                 master.getDevice(2).getMedium());
259         assertEquals(1,
260                 master.getDevice(2).getVersion());
261         assertEquals(1,
262                 master.getDevice(3).getAddress());
263         assertEquals(76543210,
264                 master.getDevice(3).getIdentNumber());
265         assertEquals("H@P",
266                 master.getDevice(3).getManufacturer());
267         assertEquals(MBusMedium.GAS,
268                 master.getDevice(3).getMedium());
269         assertEquals(1,
270                 master.getDevice(3).getVersion());
271     }
272 
273     @Test
274     @Ignore
275     public void testStdResp()
276             throws Exception {
277         /*
278          System.out.println("testStdResp");
279          slaves.respondToRequest("105B005B16", "6847476808007225543699824D0316B03800000C78255436990D7C084449202E747375630A36373031303741543939046D160F3C080413B601000004937F1F0000004413B50100000F1C0CF016");
280          slaves.respondToRequest("105B005B16", "6847476808007225543699824D0316B03800000C78255436990D7C084449202E747375630A36373031303741543939046D160F3C080413B601000004937F1F0000004413B50100000F1C0CF016");
281          slaves.replay();
282          master.searchDevicesByPrimaryAddress(0, 0);
283          MBusResponseFramesContainer device = master.getDevice(0);
284          Map<ResponseFrame, Map<DataTag, DataBlock>> map = device.readValues(master);
285          assertTrue(slaves.isOK());
286          assertEquals(1, device.getResponseFrameCount());
287          ResponseFrame resp = device.getResponseFrame(0);
288          Map<DataTag, DataBlock> valueMap = map.get(resp);
289          assertEquals(7, resp.getDataBlockCount());
290          for (DataTag dt : resp) {
291          DataBlock db = valueMap.get(dt);
292          log.info("DATATAG: " + dt.toString());
293          log.info("DATABLOCK: " + db.toString());
294 
295          assertEquals(dt.getVif(), db.getVif());
296          assertEquals(dt.getDeviceUnit(), db.getSubUnit());
297          assertEquals(dt.getDifCode(), db.getDataFieldCode());
298          assertEquals(dt.getFunctionField(), db.getFunctionField());
299          assertEquals(dt.getStorageNumber(), db.getStorageNumber());
300          assertEquals(dt.getTariff(), db.getTariff());
301          if ((dt.getVifes() != null) && (db.getVifes() != null)){
302          org.junit.Assert.assertArrayEquals(dt.getVifes(), db.getVifes().toArray(new Vife[0]));
303          } else {
304          assertEquals(dt.getVifes(), db.getVifes());
305          }
306 
307          }
308          Set<DataBlock> result =  new HashSet<DataBlock>(valueMap.values());
309          for (DataBlock db : result) {
310          log.info("RESULT: " + db.toString());
311          }
312          assertEquals("RESULT SIZE", 7, result.size());
313          */
314     }
315 
316 }