/* * * * Copyright 2016 Axibase Corporation or its affiliates. All Rights Reserved. * * * * Licensed under the Apache License, Version 2.0 (the "License"). * * You may not use this file except in compliance with the License. * * A copy of the License is located at * * * * https://www.axibase.com/atsd/axibase-apache-2.0.pdf * * * * or in the "license" file accompanying this file. This file is distributed * * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * * express or implied. See the License for the specific language governing * * permissions and limitations under the License. * */ package com.axibase.tsd.client.data; import com.axibase.tsd.RerunRule; import com.axibase.tsd.client.DataService; import com.axibase.tsd.client.HttpClientManager; import com.axibase.tsd.model.data.Message; import com.axibase.tsd.model.data.Severity; import com.axibase.tsd.model.data.command.BatchResponse; import com.axibase.tsd.model.data.command.GetMessagesQuery; import com.axibase.tsd.network.MessageInsertCommand; import com.axibase.tsd.network.PlainCommand; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import java.util.*; import static com.axibase.tsd.TestUtil.*; import static junit.framework.Assert.*; public class MessageTest { private DataService dataService; private HttpClientManager httpClientManager; @Rule public RerunRule rerunRule = new RerunRule(); @Before public void setUp() throws Exception { httpClientManager = buildHttpClientManager(); httpClientManager.setCheckPeriodMillis(1000); // httpClientManager.setCheckPeriodMillis(30); // to extreme tests dataService = new DataService(); dataService.setHttpClientManager(httpClientManager); waitWorkingServer(httpClientManager); } @Test public void testInsertMessages() throws Exception { final String entityName = buildVariablePrefix() + "entity"; final String messageTextUnknown = "message txt 1"; final String messageTextMinor = "message text 2"; final String messageTextCritical = "message text 3"; final long timestamp = System.currentTimeMillis(); final Message m1 = new Message(entityName, messageTextUnknown) .setSeverity(Severity.UNKNOWN) .setTimestamp(timestamp); final Message m2 = new Message(entityName, messageTextMinor) .setSeverity(Severity.MINOR) .setTimestamp(timestamp); final Message m3 = new Message(entityName, messageTextCritical) .setSeverity(Severity.CRITICAL) .setTimestamp(timestamp); assertTrue(dataService.insertMessages(m1, m2, m3)); Thread.sleep(WAIT_TIME); GetMessagesQuery getMessagesQuery = new GetMessagesQuery(Arrays.asList(entityName)) .setStartDate(new Date(timestamp - 1)).setEndDate(new Date(timestamp + 1)); List<Message> messages = dataService.retrieveMessages(getMessagesQuery); assertNotNull(messages); assertEquals(3, messages.size()); boolean unknownChecked = false; boolean minorChecked = false; boolean criticalChecked = false; for (Message msg : messages) { if (msg.getSeverity() == Severity.UNKNOWN) { assertFalse(unknownChecked); assertEquals(messageTextUnknown, msg.getMessage()); unknownChecked = true; } else if (msg.getSeverity() == Severity.MINOR) { assertFalse(minorChecked); assertEquals(messageTextMinor, msg.getMessage()); minorChecked = true; } else if (msg.getSeverity() == Severity.CRITICAL) { assertFalse(criticalChecked); assertEquals(messageTextCritical, msg.getMessage()); criticalChecked = true; } } assertTrue(unknownChecked); assertTrue(minorChecked); assertTrue(criticalChecked); } @Test public void testRetrieveMessagesByEntityName() throws Exception { final String entityName = buildVariablePrefix() + "entity"; final String messageTextUnknown = "message txt 1"; final long timestamp = MOCK_TIMESTAMP; final long delta = 1L; GetMessagesQuery getMessagesQuery = new GetMessagesQuery(entityName).setStartDate(new Date(timestamp - delta)).setEndDate(new Date(timestamp + delta)); if (dataService.retrieveMessages(getMessagesQuery).isEmpty()) { Message message = new Message(entityName, messageTextUnknown).setSeverity(Severity.UNKNOWN).setTimestamp(timestamp); assertTrue(dataService.insertMessages(message)); } List messages = dataService.retrieveMessages(getMessagesQuery); assertFalse(messages.isEmpty()); assertTrue(messages.get(0) instanceof Message); assertEquals(entityName, ((Message) messages.get(0)).getEntityName()); } @Test public void testRetrieveMessagesByEntitiesName() throws Exception { final String messageTextUnknown = "message txt 1"; final long timestamp = MOCK_TIMESTAMP; buildVariablePrefix(); final List<String> entitiesName = Arrays.asList(buildVariablePrefix() + "entity-first", buildVariablePrefix() + "entity-second"); GetMessagesQuery getMessagesQuery = new GetMessagesQuery(entitiesName).setStartDate(new Date(timestamp)); if (dataService.retrieveMessages(getMessagesQuery).size() < 2) { for (String entityName : entitiesName) { Message message = new Message(entityName, messageTextUnknown).setSeverity(Severity.UNKNOWN).setTimestamp(timestamp); assertTrue(dataService.insertMessages(message)); } Thread.sleep(WAIT_TIME); } List<Message> messages = dataService.retrieveMessages(getMessagesQuery); assertFalse(messages.isEmpty()); assertTrue(messages.get(0) instanceof Message); assertFalse(messages.isEmpty()); final List<String> recivedEntitiesName = new ArrayList<>(); for (Message msg : messages) { recivedEntitiesName.add(msg.getEntityName()); } assertTrue(recivedEntitiesName.containsAll(entitiesName)); } @Test public void testSendBatch() throws Exception { final String entityName = buildVariablePrefix() + "entity"; final String messageText = "message txt 1"; final long st = System.currentTimeMillis(); final ArrayList<PlainCommand> commands = new ArrayList<>(); commands.add(new MessageInsertCommand(entityName, st, Collections.<String, String>emptyMap(), messageText)); commands.add(new MessageInsertCommand(entityName, st+2, Collections.singletonMap("tag1", "value1"), messageText)); commands.add(new MessageInsertCommand(entityName, st+3, Collections.singletonMap("tag1", "value1"), "")); final BatchResponse batchResponse = dataService.sendBatch(commands); assertTrue(batchResponse.getResult().getFail() == 0); Thread.sleep(WAIT_TIME); final GetMessagesQuery getMessagesQuery = new GetMessagesQuery(entityName); getMessagesQuery.setStartDate(new Date(st)); getMessagesQuery.setEndDate(new Date(st + 4)); final List<Message> messageResults = dataService.retrieveMessages(getMessagesQuery); assertEquals(3, messageResults.size()); } @After public void tearDown() throws Exception { httpClientManager.close(); } }