@Test public void testDecodeRawSetsException() throws Exception { byte[] dataSet = IpfixUtilities.hexStringToByteArray("0103012000000061BC0503000F6161000000DE00000000014D6262000001BC0503000318A3286FFFF00000E910" + "0103012000000061BC0503000F6161000000DE00000000014D6262000001BC0503000318A3286FFFF00000E91000014D6262000001BC0503000318A3286FFFF00000E91001" + "0103012000000061BC0503000F6161000000DE00000000014D6262000001BC0503000318A3286FFFF00000E91000014D6262000001BC0503000318A3286FFFF00000E91002" + "0103012000000061BC0503000F6161000000DE00000000014D6262000001BC0503000318A3286FFFF00000E91000014D6262000001BC0503000318A3286FFFF00000E91002" + "0103012000000061BC0503000F6161000000DE00000000014D6262000001BC0503000318A3286FFFF00000E91000014D6262000001BC0503000318A3286FFFF00000E91003"); byte[] dataTemplateRecord = IpfixUtilities.hexStringToByteArray("01030004008D000400290002802A000400000E918286FFFF00000E91"); IpfixDataSet set = new IpfixDataSet(dataSet); AbstractTemplateRecord blueprint = new IpfixTemplateRecord(dataTemplateRecord); when(m_templateProvider.get(259)).thenReturn(blueprint); InformationElement ie32 = mock(InformationElement.class); String hostName = "hostname"; String family = "sample-model-tls-DPU-1.0"; when(m_deviceFamilyCacheService.getDeviceFamily(hostName)).thenReturn(family); when(m_informationElementService.getInformationElement(family, 646)).thenReturn(ie32); when(ie32.getDataType()).thenReturn(InformationElementType.UNSIGNED32); try { m_decodingDataRecordService.decodeDataSet(hostName, 1L, set, null, m_templateProvider); fail(); } catch (DecodingException e) { assertEquals("Error decoding data set: " + set + ", with template set: " + blueprint + " on the device: hostname", e.getMessage()); } }
@Override public Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage, CollectingServiceImpl.TemplateProvider templateProvider) throws DecodingException { if (Objects.isNull(set)) { throw new DecodingException("Data set is invalid for decoding process."); } int templateId = set.getHeader().getId(); LOGGER.debug(String.format("Start decoding data set (Observation domain: %s, Set id: %s)", obsvDomain, templateId)); AbstractTemplateRecord blueprint = templateProvider.get(templateId); if (Objects.isNull(blueprint)) { LOGGER.debug(String.format("Template %s on device %s not available in cache, start buffering", templateId, deviceName)); return Collections.emptySet(); } else { LOGGER.debug("Template available in cache, start decoding"); return decodeDataSetWithTemplate(deviceName, blueprint, obsvDomain, set, ipfixMessage); } }
DecodingDataRecordServiceImpl implements DecodingDataRecordService { @Override public Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage, CollectingServiceImpl.TemplateProvider templateProvider) throws DecodingException { if (Objects.isNull(set)) { throw new DecodingException("Data set is invalid for decoding process."); } int templateId = set.getHeader().getId(); LOGGER.debug(String.format("Start decoding data set (Observation domain: %s, Set id: %s)", obsvDomain, templateId)); AbstractTemplateRecord blueprint = templateProvider.get(templateId); if (Objects.isNull(blueprint)) { LOGGER.debug(String.format("Template %s on device %s not available in cache, start buffering", templateId, deviceName)); return Collections.emptySet(); } else { LOGGER.debug("Template available in cache, start decoding"); return decodeDataSetWithTemplate(deviceName, blueprint, obsvDomain, set, ipfixMessage); } } }
DecodingDataRecordServiceImpl implements DecodingDataRecordService { @Override public Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage, CollectingServiceImpl.TemplateProvider templateProvider) throws DecodingException { if (Objects.isNull(set)) { throw new DecodingException("Data set is invalid for decoding process."); } int templateId = set.getHeader().getId(); LOGGER.debug(String.format("Start decoding data set (Observation domain: %s, Set id: %s)", obsvDomain, templateId)); AbstractTemplateRecord blueprint = templateProvider.get(templateId); if (Objects.isNull(blueprint)) { LOGGER.debug(String.format("Template %s on device %s not available in cache, start buffering", templateId, deviceName)); return Collections.emptySet(); } else { LOGGER.debug("Template available in cache, start decoding"); return decodeDataSetWithTemplate(deviceName, blueprint, obsvDomain, set, ipfixMessage); } } DecodingDataRecordServiceImpl(InformationElementService informationElementServiceCache,
                                         DecodeMethodFactory decodeMethodFactory, DeviceCacheService deviceCacheService); }
DecodingDataRecordServiceImpl implements DecodingDataRecordService { @Override public Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage, CollectingServiceImpl.TemplateProvider templateProvider) throws DecodingException { if (Objects.isNull(set)) { throw new DecodingException("Data set is invalid for decoding process."); } int templateId = set.getHeader().getId(); LOGGER.debug(String.format("Start decoding data set (Observation domain: %s, Set id: %s)", obsvDomain, templateId)); AbstractTemplateRecord blueprint = templateProvider.get(templateId); if (Objects.isNull(blueprint)) { LOGGER.debug(String.format("Template %s on device %s not available in cache, start buffering", templateId, deviceName)); return Collections.emptySet(); } else { LOGGER.debug("Template available in cache, start decoding"); return decodeDataSetWithTemplate(deviceName, blueprint, obsvDomain, set, ipfixMessage); } } DecodingDataRecordServiceImpl(InformationElementService informationElementServiceCache,
                                         DecodeMethodFactory decodeMethodFactory, DeviceCacheService deviceCacheService); @Override Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage,
                                                CollectingServiceImpl.TemplateProvider templateProvider); }
DecodingDataRecordServiceImpl implements DecodingDataRecordService { @Override public Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage, CollectingServiceImpl.TemplateProvider templateProvider) throws DecodingException { if (Objects.isNull(set)) { throw new DecodingException("Data set is invalid for decoding process."); } int templateId = set.getHeader().getId(); LOGGER.debug(String.format("Start decoding data set (Observation domain: %s, Set id: %s)", obsvDomain, templateId)); AbstractTemplateRecord blueprint = templateProvider.get(templateId); if (Objects.isNull(blueprint)) { LOGGER.debug(String.format("Template %s on device %s not available in cache, start buffering", templateId, deviceName)); return Collections.emptySet(); } else { LOGGER.debug("Template available in cache, start decoding"); return decodeDataSetWithTemplate(deviceName, blueprint, obsvDomain, set, ipfixMessage); } } DecodingDataRecordServiceImpl(InformationElementService informationElementServiceCache,
                                         DecodeMethodFactory decodeMethodFactory, DeviceCacheService deviceCacheService); @Override Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage,
                                                CollectingServiceImpl.TemplateProvider templateProvider);  }