When DB expunge is invoked from the management screen, also indexManager performs expunge. Signed-off-by: Andrew DeMaria <lostonamountain@gmail.com>master
parent
c6ae5a1df7
commit
645fb88c7d
@ -0,0 +1,201 @@ |
|||||||
|
/* |
||||||
|
This file is part of Airsonic. |
||||||
|
|
||||||
|
Airsonic is free software: you can redistribute it and/or modify |
||||||
|
it under the terms of the GNU General Public License as published by |
||||||
|
the Free Software Foundation, either version 3 of the License, or |
||||||
|
(at your option) any later version. |
||||||
|
|
||||||
|
Airsonic is distributed in the hope that it will be useful, |
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
GNU General Public License for more details. |
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License |
||||||
|
along with Airsonic. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Copyright 2016 (C) Airsonic Authors |
||||||
|
Based upon Subsonic, Copyright 2009 (C) Sindre Mehus |
||||||
|
*/ |
||||||
|
package org.airsonic.player.service.search; |
||||||
|
|
||||||
|
import org.airsonic.player.dao.AlbumDao; |
||||||
|
import org.airsonic.player.dao.ArtistDao; |
||||||
|
import org.airsonic.player.dao.MediaFileDao; |
||||||
|
import org.airsonic.player.domain.MusicFolder; |
||||||
|
import org.airsonic.player.domain.SearchCriteria; |
||||||
|
import org.airsonic.player.domain.SearchResult; |
||||||
|
import org.airsonic.player.service.SearchService; |
||||||
|
import org.airsonic.player.service.search.IndexManager; |
||||||
|
import org.airsonic.player.service.search.IndexType; |
||||||
|
import org.junit.Before; |
||||||
|
import org.junit.Rule; |
||||||
|
import org.junit.Test; |
||||||
|
import org.junit.rules.TemporaryFolder; |
||||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||||
|
import org.springframework.core.io.ResourceLoader; |
||||||
|
|
||||||
|
import java.io.File; |
||||||
|
import java.util.Date; |
||||||
|
import java.util.List; |
||||||
|
import java.util.ArrayList; |
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals; |
||||||
|
import static org.springframework.util.ObjectUtils.isEmpty; |
||||||
|
|
||||||
|
public class IndexManagerTestCase extends AbstractAirsonicHomeTest { |
||||||
|
|
||||||
|
private List<MusicFolder> musicFolders; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private SearchService searchService; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private IndexManager indexManager; |
||||||
|
|
||||||
|
@Override |
||||||
|
public List<MusicFolder> getMusicFolders() { |
||||||
|
if (isEmpty(musicFolders)) { |
||||||
|
musicFolders = new ArrayList<>(); |
||||||
|
File musicDir = new File(resolveBaseMediaPath.apply("Music")); |
||||||
|
musicFolders.add(new MusicFolder(1, musicDir, "Music", true, new Date())); |
||||||
|
} |
||||||
|
return musicFolders; |
||||||
|
} |
||||||
|
|
||||||
|
@Before |
||||||
|
public void setup() throws Exception { |
||||||
|
populateDatabaseOnlyOnce(); |
||||||
|
} |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private MediaFileDao mediaFileDao; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private ArtistDao artistDao; |
||||||
|
|
||||||
|
@Autowired |
||||||
|
private AlbumDao albumDao; |
||||||
|
|
||||||
|
@Rule |
||||||
|
public TemporaryFolder temporaryFolder = new TemporaryFolder(); |
||||||
|
|
||||||
|
@Autowired |
||||||
|
ResourceLoader resourceLoader; |
||||||
|
|
||||||
|
@Test |
||||||
|
public void testExpunge() throws InterruptedException { |
||||||
|
|
||||||
|
SearchCriteria criteria = new SearchCriteria(); |
||||||
|
criteria.setOffset(0); |
||||||
|
criteria.setCount(Integer.MAX_VALUE); |
||||||
|
criteria.setQuery("_DIR_ Ravel"); |
||||||
|
|
||||||
|
SearchCriteria criteriaSong = new SearchCriteria(); |
||||||
|
criteriaSong.setOffset(0); |
||||||
|
criteriaSong.setCount(Integer.MAX_VALUE); |
||||||
|
criteriaSong.setQuery("Gaspard"); |
||||||
|
|
||||||
|
SearchCriteria criteriaAlbumId3 = new SearchCriteria(); |
||||||
|
criteriaAlbumId3.setOffset(0); |
||||||
|
criteriaAlbumId3.setCount(Integer.MAX_VALUE); |
||||||
|
criteriaAlbumId3.setQuery("Complete Piano Works"); |
||||||
|
|
||||||
|
/* Delete DB record. */ |
||||||
|
|
||||||
|
// artist
|
||||||
|
SearchResult result = searchService.search(criteria, musicFolders, IndexType.ARTIST); |
||||||
|
assertEquals(2, result.getMediaFiles().size()); |
||||||
|
assertEquals("_DIR_ Ravel", result.getMediaFiles().get(0).getName()); |
||||||
|
assertEquals("_DIR_ Sixteen Horsepower", result.getMediaFiles().get(1).getName()); |
||||||
|
|
||||||
|
List<Integer> candidates = mediaFileDao.getArtistExpungeCandidates(); |
||||||
|
assertEquals(0, candidates.size()); |
||||||
|
|
||||||
|
result.getMediaFiles().forEach(a -> mediaFileDao.deleteMediaFile(a.getPath())); |
||||||
|
|
||||||
|
candidates = mediaFileDao.getArtistExpungeCandidates(); |
||||||
|
assertEquals(2, candidates.size()); |
||||||
|
|
||||||
|
// album
|
||||||
|
result = searchService.search(criteria, musicFolders, IndexType.ALBUM); |
||||||
|
assertEquals(2, result.getMediaFiles().size()); |
||||||
|
assertEquals("_DIR_ Ravel - Complete Piano Works", result.getMediaFiles().get(0).getName()); |
||||||
|
assertEquals("_DIR_ Ravel - Chamber Music With Voice", result.getMediaFiles().get(1).getName()); |
||||||
|
|
||||||
|
candidates = mediaFileDao.getAlbumExpungeCandidates(); |
||||||
|
assertEquals(0, candidates.size()); |
||||||
|
|
||||||
|
result.getMediaFiles().forEach(a -> mediaFileDao.deleteMediaFile(a.getPath())); |
||||||
|
|
||||||
|
candidates = mediaFileDao.getAlbumExpungeCandidates(); |
||||||
|
assertEquals(2, candidates.size()); |
||||||
|
|
||||||
|
// song
|
||||||
|
result = searchService.search(criteriaSong, musicFolders, IndexType.SONG); |
||||||
|
assertEquals(2, result.getMediaFiles().size()); |
||||||
|
assertEquals("01 - Gaspard de la Nuit - i. Ondine", result.getMediaFiles().get(0).getName()); |
||||||
|
assertEquals("02 - Gaspard de la Nuit - ii. Le Gibet", result.getMediaFiles().get(1).getName()); |
||||||
|
|
||||||
|
candidates = mediaFileDao.getSongExpungeCandidates(); |
||||||
|
assertEquals(0, candidates.size()); |
||||||
|
|
||||||
|
result.getMediaFiles().forEach(a -> mediaFileDao.deleteMediaFile(a.getPath())); |
||||||
|
|
||||||
|
candidates = mediaFileDao.getSongExpungeCandidates(); |
||||||
|
assertEquals(2, candidates.size()); |
||||||
|
|
||||||
|
// artistid3
|
||||||
|
result = searchService.search(criteria, musicFolders, IndexType.ARTIST_ID3); |
||||||
|
assertEquals(1, result.getArtists().size()); |
||||||
|
assertEquals("_DIR_ Ravel", result.getArtists().get(0).getName()); |
||||||
|
|
||||||
|
candidates = artistDao.getExpungeCandidates(); |
||||||
|
assertEquals(0, candidates.size()); |
||||||
|
|
||||||
|
artistDao.markNonPresent(new Date()); |
||||||
|
|
||||||
|
candidates = artistDao.getExpungeCandidates(); |
||||||
|
assertEquals(4, candidates.size()); |
||||||
|
|
||||||
|
// albumId3
|
||||||
|
result = searchService.search(criteriaAlbumId3, musicFolders, IndexType.ALBUM_ID3); |
||||||
|
assertEquals(1, result.getAlbums().size()); |
||||||
|
assertEquals("Complete Piano Works", result.getAlbums().get(0).getName()); |
||||||
|
|
||||||
|
candidates = albumDao.getExpungeCandidates(); |
||||||
|
assertEquals(0, candidates.size()); |
||||||
|
|
||||||
|
albumDao.markNonPresent(new Date()); |
||||||
|
|
||||||
|
candidates = albumDao.getExpungeCandidates(); |
||||||
|
assertEquals(4, candidates.size()); |
||||||
|
|
||||||
|
/* Does not scan, only expunges the index. */ |
||||||
|
indexManager.startIndexing(); |
||||||
|
indexManager.expunge(); |
||||||
|
indexManager.stopIndexing(); |
||||||
|
|
||||||
|
/* |
||||||
|
* Subsequent search results. |
||||||
|
* Results can also be confirmed with Luke. |
||||||
|
*/ |
||||||
|
|
||||||
|
result = searchService.search(criteria, musicFolders, IndexType.ARTIST); |
||||||
|
assertEquals(0, result.getMediaFiles().size()); |
||||||
|
|
||||||
|
result = searchService.search(criteria, musicFolders, IndexType.ALBUM); |
||||||
|
assertEquals(0, result.getMediaFiles().size()); |
||||||
|
|
||||||
|
result = searchService.search(criteriaSong, musicFolders, IndexType.SONG); |
||||||
|
assertEquals(0, result.getMediaFiles().size()); |
||||||
|
|
||||||
|
result = searchService.search(criteria, musicFolders, IndexType.ARTIST_ID3); |
||||||
|
assertEquals(0, result.getArtists().size()); |
||||||
|
|
||||||
|
result = searchService.search(criteriaAlbumId3, musicFolders, IndexType.ALBUM_ID3); |
||||||
|
assertEquals(0, result.getAlbums().size()); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue