package cc.blynk.server.workers; import cc.blynk.server.core.BlockingIOProcessor; import cc.blynk.server.core.dao.FileManager; import cc.blynk.server.core.dao.UserDao; import cc.blynk.server.core.dao.UserKey; import cc.blynk.server.core.model.AppName; import cc.blynk.server.core.model.auth.User; import cc.blynk.server.core.stats.GlobalStats; import cc.blynk.server.db.DBManager; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import static org.mockito.Mockito.*; /** * The Blynk Project. * Created by Dmitriy Dumanskiy. * Created on 3/3/2015. */ @RunWith(MockitoJUnitRunner.class) public class ProfileSaverWorkerTest { @Mock private UserDao userDao; @Mock private FileManager fileManager; @Mock private GlobalStats stats; private BlockingIOProcessor blockingIOProcessor = new BlockingIOProcessor(1, 1); @Test public void testCorrectProfilesAreSaved() throws IOException { ProfileSaverWorker profileSaverWorker = new ProfileSaverWorker(userDao, fileManager, new DBManager(blockingIOProcessor, true)); User user1 = new User("1", "", AppName.BLYNK, "local", false, false); User user2 = new User("2", "", AppName.BLYNK, "local", false, false); User user3 = new User("3", "", AppName.BLYNK, "local", false, false); User user4 = new User("4", "", AppName.BLYNK, "local", false, false); ConcurrentMap<UserKey, User> userMap = new ConcurrentHashMap<>(); userMap.put(new UserKey(user1), user1); userMap.put(new UserKey(user2), user2); userMap.put(new UserKey(user3), user3); userMap.put(new UserKey(user4), user4); when(userDao.getUsers()).thenReturn(userMap); profileSaverWorker.run(); verify(fileManager, times(4)).overrideUserFile(any()); verify(fileManager).overrideUserFile(user1); verify(fileManager).overrideUserFile(user2); verify(fileManager).overrideUserFile(user3); verify(fileManager).overrideUserFile(user4); } @Test public void testNoProfileChanges() throws Exception { User user1 = new User("1", "", AppName.BLYNK, "local", false, false); User user2 = new User("2", "", AppName.BLYNK, "local", false, false); User user3 = new User("3", "", AppName.BLYNK, "local", false, false); User user4 = new User("4", "", AppName.BLYNK, "local", false, false); Map<UserKey, User> userMap = new HashMap<>(); userMap.put(new UserKey("1", AppName.BLYNK), user1); userMap.put(new UserKey("2", AppName.BLYNK), user2); userMap.put(new UserKey("3", AppName.BLYNK), user3); userMap.put(new UserKey("4", AppName.BLYNK), user4); Thread.sleep(1); ProfileSaverWorker profileSaverWorker = new ProfileSaverWorker(userDao, fileManager, new DBManager(blockingIOProcessor, true)); when(userDao.getUsers()).thenReturn(userMap); profileSaverWorker.run(); verifyNoMoreInteractions(fileManager); } }