/* * Digital Audio Access Protocol (DAAP) Library * Copyright (C) 2004-2010 Roger Kapsi * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License 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 org.ardverk.daap.tests; import junit.framework.TestCase; import junit.framework.TestSuite; import org.ardverk.daap.AutoCommitTransaction; import org.ardverk.daap.Database; import org.ardverk.daap.Library; import org.ardverk.daap.Playlist; import org.ardverk.daap.Song; import org.ardverk.daap.Transaction; public class DaapTransactionTest extends TestCase { public static TestSuite suite() { return new TestSuite(DaapTransactionTest.class); } private Library library; public DaapTransactionTest(String arg0) { super(arg0); } protected void setUp() throws Exception { library = new Library("DaapTransactionTest"); } public void testCommit() { assertTrue(library.getRevision() == 1); Transaction txn = library.beginTransaction(); Database database = new Database("Database"); library.addDatabase(txn, database); txn.commit(); assertTrue(library.getRevision() == 2); assertTrue(library.getDatabaseCount() == 1); } public void testRollback() { assertTrue(library.getRevision() == 1); Transaction txn = library.beginTransaction(); Database database = new Database("Database"); library.addDatabase(txn, database); txn.rollback(); assertTrue(library.getRevision() == 1); assertTrue(library.getDatabaseCount() == 0); } public void testExtendedCommit() { Database database = new Database("Database"); Playlist playlist = new Playlist("Playlist"); assertTrue(library.getRevision() == 1); assertTrue(library.getDatabaseCount() == 0); assertTrue(database.getPlaylistCount() == 1); /* masterPlaylist!!! */ Transaction txn = library.beginTransaction(); database.addPlaylist(txn, playlist); library.addDatabase(txn, database); txn.commit(); assertTrue(library.getRevision() == 2); /* incremeted with each commit */ assertTrue(library.getDatabaseCount() == 1); assertTrue(database.getPlaylistCount() == 2); Transaction txn2 = library.beginTransaction(); database.setName(txn2, "NewDatabaseName"); playlist.setName(txn2, "NewPlaylistName"); library.setName(txn2, "NewLibraryName"); txn2.commit(); assertTrue(library.getRevision() == 3); assertTrue(library.getDatabaseCount() == 1); assertTrue(database.getPlaylistCount() == 2); assertEquals(library.getName(), "NewLibraryName"); assertEquals(database.getName(), "NewDatabaseName"); assertEquals(playlist.getName(), "NewPlaylistName"); Song song1 = new Song("Song1"); Transaction txn3 = library.beginTransaction(); playlist.addSong(txn3, song1); txn3.commit(); assertTrue(library.getRevision() == 4); assertTrue(library.getDatabaseCount() == 1); assertTrue(database.getPlaylistCount() == 2); assertTrue(playlist.getSongCount() == 1 && playlist.containsSong(song1)); assertTrue(database.getSongCount() == 1 && database.containsSong(song1)); Playlist masterPlaylist = database.getMasterPlaylist(); assertFalse(masterPlaylist.getSongCount() == 1 && masterPlaylist.containsSong(song1)); } public void testAutoCommit() { int revision = library.getRevision(); Database database = new Database("Database"); Playlist playlist = new Playlist("Playlist"); Song song = new Song("Song"); library.addDatabase(null, database); database.addPlaylist(null, playlist); playlist.addSong(null, song); library.commit(null); assertTrue(library.containsDatabase(database)); assertTrue(database.containsPlaylist(playlist)); assertTrue(database.containsSong(song)); assertTrue(playlist.containsSong(song)); assertTrue(library.getRevision() == (revision + 1)); AutoCommitTransaction autoCommitTxn = new AutoCommitTransaction( library, 2000, 10); // Test timed auto commit int databaseSongCount = database.getSongCount(); int playlistSongCount = playlist.getSongCount(); for (int i = 0; i < 5; i++) { song = new Song("Test Song: " + i); playlist.addSong(autoCommitTxn, song); } try { Thread.sleep(3000); } catch (Exception err) { assertTrue(false); } assertTrue(database.getSongCount() == (databaseSongCount + 5)); assertTrue(playlist.getSongCount() == (playlistSongCount + 5)); assertTrue(database.containsSong(song)); assertTrue(playlist.containsSong(song)); // Test enforced commit databaseSongCount = database.getSongCount(); playlistSongCount = playlist.getSongCount(); // +3 for timed commit Song[] songs = new Song[autoCommitTxn.getEnforceCommit() + 3]; for (int i = 0; i < songs.length; i++) { songs[i] = new Song("Test Song: " + i); playlist.addSong(autoCommitTxn, songs[i]); } assertTrue(database.getSongCount() == (databaseSongCount + autoCommitTxn .getEnforceCommit())); assertTrue(playlist.getSongCount() == (playlistSongCount + autoCommitTxn .getEnforceCommit())); assertTrue(database.containsSong(songs[9])); assertTrue(playlist.containsSong(songs[9])); databaseSongCount = database.getSongCount(); playlistSongCount = playlist.getSongCount(); try { Thread.sleep(3000); } catch (Exception err) { assertTrue(false); } assertTrue(database.getSongCount() == (databaseSongCount + 3)); assertTrue(playlist.getSongCount() == (playlistSongCount + 3)); assertTrue(database.containsSong(songs[songs.length - 1])); assertTrue(playlist.containsSong(songs[songs.length - 1])); } }