@ -19,13 +19,16 @@ import com.datastax.oss.driver.api.core.uuid.Uuids;
import org.junit.After ;
import org.junit.Assert ;
import org.junit.Before ;
import org.junit.Rule ;
import org.junit.Test ;
import org.junit.rules.ExpectedException ;
import org.thingsboard.common.util.JacksonUtil ;
import org.thingsboard.server.common.data.Device ;
import org.thingsboard.server.common.data.DeviceProfile ;
import org.thingsboard.server.common.data.Firmware ;
import org.thingsboard.server.common.data.FirmwareInfo ;
import org.thingsboard.server.common.data.Tenant ;
import org.thingsboard.server.common.data.id.DeviceProfileId ;
import org.thingsboard.server.common.data.id.TenantId ;
import org.thingsboard.server.common.data.page.PageData ;
import org.thingsboard.server.common.data.page.PageLink ;
@ -36,6 +39,8 @@ import java.util.ArrayList;
import java.util.Collections ;
import java.util.List ;
import static org.thingsboard.server.common.data.firmware.FirmwareType.FIRMWARE ;
public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
public static final String TITLE = "My firmware" ;
@ -50,6 +55,8 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
private TenantId tenantId ;
private DeviceProfileId deviceProfileId ;
@Before
public void before ( ) {
Tenant tenant = new Tenant ( ) ;
@ -57,8 +64,16 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
Tenant savedTenant = tenantService . saveTenant ( tenant ) ;
Assert . assertNotNull ( savedTenant ) ;
tenantId = savedTenant . getId ( ) ;
DeviceProfile deviceProfile = this . createDeviceProfile ( tenantId , "Device Profile" ) ;
DeviceProfile savedDeviceProfile = deviceProfileService . saveDeviceProfile ( deviceProfile ) ;
Assert . assertNotNull ( savedDeviceProfile ) ;
deviceProfileId = savedDeviceProfile . getId ( ) ;
}
@Rule
public ExpectedException thrown = ExpectedException . none ( ) ;
@After
public void after ( ) {
tenantService . deleteTenant ( tenantId ) ;
@ -68,6 +83,8 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
public void testSaveFirmware ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -99,6 +116,8 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
public void testSaveFirmwareInfoAndUpdateWithData ( ) {
FirmwareInfo firmwareInfo = new FirmwareInfo ( ) ;
firmwareInfo . setTenantId ( tenantId ) ;
firmwareInfo . setDeviceProfileId ( deviceProfileId ) ;
firmwareInfo . setType ( FIRMWARE ) ;
firmwareInfo . setTitle ( TITLE ) ;
firmwareInfo . setVersion ( VERSION ) ;
FirmwareInfo savedFirmwareInfo = firmwareService . saveFirmwareInfo ( firmwareInfo ) ;
@ -112,6 +131,8 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
Firmware firmware = new Firmware ( savedFirmwareInfo . getId ( ) ) ;
firmware . setCreatedTime ( firmwareInfo . getCreatedTime ( ) ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -135,9 +156,11 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
firmwareService . deleteFirmware ( tenantId , savedFirmwareInfo . getId ( ) ) ;
}
@Test ( expected = DataValidationException . class )
@Test
public void testSaveFirmwareWithEmptyTenant ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -145,65 +168,126 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
firmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
firmware . setChecksum ( CHECKSUM ) ;
firmware . setData ( DATA ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware should be assigned to tenant!" ) ;
firmwareService . saveFirmware ( firmware ) ;
}
@Test ( expected = DataValidationException . class )
@Test
public void testSaveFirmwareWithEmptyDeviceProfile ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
firmware . setContentType ( CONTENT_TYPE ) ;
firmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
firmware . setChecksum ( CHECKSUM ) ;
firmware . setData ( DATA ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware should be assigned to deviceProfile!" ) ;
firmwareService . saveFirmware ( firmware ) ;
}
@Test
public void testSaveFirmwareWithEmptyType ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
firmware . setContentType ( CONTENT_TYPE ) ;
firmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
firmware . setChecksum ( CHECKSUM ) ;
firmware . setData ( DATA ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Type should be specified!" ) ;
firmwareService . saveFirmware ( firmware ) ;
}
@Test
public void testSaveFirmwareWithEmptyTitle ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
firmware . setContentType ( CONTENT_TYPE ) ;
firmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
firmware . setChecksum ( CHECKSUM ) ;
firmware . setData ( DATA ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware title should be specified!" ) ;
firmwareService . saveFirmware ( firmware ) ;
}
@Test ( expected = DataValidationException . class )
@Test
public void testSaveFirmwareWithEmptyFileName ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setContentType ( CONTENT_TYPE ) ;
firmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
firmware . setChecksum ( CHECKSUM ) ;
firmware . setData ( DATA ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware file name should be specified!" ) ;
firmwareService . saveFirmware ( firmware ) ;
}
@Test ( expected = DataValidationException . class )
@Test
public void testSaveFirmwareWithEmptyContentType ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
firmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
firmware . setChecksum ( CHECKSUM ) ;
firmware . setData ( DATA ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware content type should be specified!" ) ;
firmwareService . saveFirmware ( firmware ) ;
}
@Test ( expected = DataValidationException . class )
@Test
public void testSaveFirmwareWithEmptyData ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
firmware . setContentType ( CONTENT_TYPE ) ;
firmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
firmware . setChecksum ( CHECKSUM ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware data should be specified!" ) ;
firmwareService . saveFirmware ( firmware ) ;
}
@Test ( expected = DataValidationException . class )
@Test
public void testSaveFirmwareWithInvalidTenant ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( new TenantId ( Uuids . timeBased ( ) ) ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -211,41 +295,77 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
firmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
firmware . setChecksum ( CHECKSUM ) ;
firmware . setData ( DATA ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware is referencing to non-existent tenant!" ) ;
firmwareService . saveFirmware ( firmware ) ;
}
@Test ( expected = DataValidationException . class )
@Test
public void testSaveFirmwareWithInvalidDeviceProfileId ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( new DeviceProfileId ( Uuids . timeBased ( ) ) ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
firmware . setContentType ( CONTENT_TYPE ) ;
firmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
firmware . setChecksum ( CHECKSUM ) ;
firmware . setData ( DATA ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware is referencing to non-existent device profile!" ) ;
firmwareService . saveFirmware ( firmware ) ;
}
@Test
public void testSaveFirmwareWithEmptyChecksum ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( new TenantId ( Uuids . timeBased ( ) ) ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
firmware . setContentType ( CONTENT_TYPE ) ;
firmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
firmware . setData ( DATA ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware checksum should be specified!" ) ;
firmwareService . saveFirmware ( firmware ) ;
}
@Test ( expected = DataValidationException . class )
@Test
public void testSaveFirmwareInfoWithExistingTitleAndVersion ( ) {
FirmwareInfo firmwareInfo = new FirmwareInfo ( ) ;
firmwareInfo . setTenantId ( tenantId ) ;
firmwareInfo . setDeviceProfileId ( deviceProfileId ) ;
firmwareInfo . setType ( FIRMWARE ) ;
firmwareInfo . setTitle ( TITLE ) ;
firmwareInfo . setVersion ( VERSION ) ;
firmwareService . saveFirmwareInfo ( firmwareInfo ) ;
FirmwareInfo newFirmwareInfo = new FirmwareInfo ( ) ;
newFirmwareInfo . setTenantId ( tenantId ) ;
newFirmwareInfo . setDeviceProfileId ( deviceProfileId ) ;
newFirmwareInfo . setType ( FIRMWARE ) ;
newFirmwareInfo . setTitle ( TITLE ) ;
newFirmwareInfo . setVersion ( VERSION ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware with such title and version already exists!" ) ;
firmwareService . saveFirmwareInfo ( newFirmwareInfo ) ;
}
@Test ( expected = DataValidationException . class )
@Test
public void testSaveFirmwareWithExistingTitleAndVersion ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -257,18 +377,27 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
Firmware newFirmware = new Firmware ( ) ;
newFirmware . setTenantId ( tenantId ) ;
newFirmware . setDeviceProfileId ( deviceProfileId ) ;
newFirmware . setType ( FIRMWARE ) ;
newFirmware . setTitle ( TITLE ) ;
newFirmware . setVersion ( VERSION ) ;
newFirmware . setFileName ( FILE_NAME ) ;
newFirmware . setContentType ( CONTENT_TYPE ) ;
newFirmware . setChecksumAlgorithm ( CHECKSUM_ALGORITHM ) ;
newFirmware . setChecksum ( CHECKSUM ) ;
newFirmware . setData ( DATA ) ;
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "Firmware with such title and version already exists!" ) ;
firmwareService . saveFirmware ( newFirmware ) ;
}
@Test ( expected = DataValidationException . class )
@Test
public void testDeleteFirmwareWithReferenceByDevice ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -281,11 +410,13 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
Device device = new Device ( ) ;
device . setTenantId ( tenantId ) ;
device . setName ( "My device" ) ;
device . setType ( "default" ) ;
device . setDeviceProfileId ( deviceProfileId ) ;
device . setFirmwareId ( savedFirmware . getId ( ) ) ;
Device savedDevice = deviceService . saveDevice ( device ) ;
try {
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "The firmware referenced by the devices cannot be deleted!" ) ;
firmwareService . deleteFirmware ( tenantId , savedFirmware . getId ( ) ) ;
} finally {
deviceService . deleteDevice ( tenantId , savedDevice . getId ( ) ) ;
@ -293,10 +424,15 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
}
}
@Test ( expected = DataValidationException . class )
@Test
public void testDeleteFirmwareWithReferenceByDeviceProfile ( ) {
DeviceProfile deviceProfile = this . createDeviceProfile ( tenantId , "Test Device Profile" ) ;
DeviceProfile savedDeviceProfile = deviceProfileService . saveDeviceProfile ( deviceProfile ) ;
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( savedDeviceProfile . getId ( ) ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -306,11 +442,12 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
firmware . setData ( DATA ) ;
Firmware savedFirmware = firmwareService . saveFirmware ( firmware ) ;
DeviceProfile deviceProfile = this . createDeviceProfile ( tenantId , "Device Profile" ) ;
deviceProfile . setFirmwareId ( savedFirmware . getId ( ) ) ;
DeviceProfile savedDeviceProfile = deviceProfileService . saveDeviceProfile ( deviceProfile ) ;
savedDeviceProfile . setFirmwareId ( savedFirmware . getId ( ) ) ;
deviceProfileService . saveDeviceProfile ( savedDeviceProfile ) ;
try {
thrown . expect ( DataValidationException . class ) ;
thrown . expectMessage ( "The firmware referenced by the device profile cannot be deleted!" ) ;
firmwareService . deleteFirmware ( tenantId , savedFirmware . getId ( ) ) ;
} finally {
deviceProfileService . deleteDeviceProfile ( tenantId , savedDeviceProfile . getId ( ) ) ;
@ -322,6 +459,8 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
public void testFindFirmwareById ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -341,6 +480,8 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
public void testFindFirmwareInfoById ( ) {
FirmwareInfo firmware = new FirmwareInfo ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
FirmwareInfo savedFirmware = firmwareService . saveFirmwareInfo ( firmware ) ;
@ -355,6 +496,8 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
public void testDeleteFirmware ( ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -377,6 +520,8 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
for ( int i = 0 ; i < 165 ; i + + ) {
Firmware firmware = new Firmware ( ) ;
firmware . setTenantId ( tenantId ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( TITLE ) ;
firmware . setVersion ( VERSION + i ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -420,6 +565,8 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
for ( int i = 0 ; i < 165 ; i + + ) {
FirmwareInfo firmwareInfo = new FirmwareInfo ( ) ;
firmwareInfo . setTenantId ( tenantId ) ;
firmwareInfo . setDeviceProfileId ( deviceProfileId ) ;
firmwareInfo . setType ( FIRMWARE ) ;
firmwareInfo . setTitle ( TITLE ) ;
firmwareInfo . setVersion ( VERSION + i ) ;
firmwareInfo . setFileName ( FILE_NAME ) ;
@ -434,7 +581,7 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
PageLink pageLink = new PageLink ( 16 ) ;
PageData < FirmwareInfo > pageData ;
do {
pageData = firmwareService . findTenantFirmwaresByTenantIdAndHasData ( tenantId , false , pageLink ) ;
pageData = firmwareService . findTenantFirmwaresByTenantIdAndDeviceProfileIdAndTypeAnd HasData ( tenantId , deviceProfileId , FIRMWARE , false , pageLink ) ;
loadedFirmwares . addAll ( pageData . getData ( ) ) ;
if ( pageData . hasNext ( ) ) {
pageLink = pageLink . nextPageLink ( ) ;
@ -450,6 +597,8 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
Firmware firmware = new Firmware ( f . getId ( ) ) ;
firmware . setCreatedTime ( f . getCreatedTime ( ) ) ;
firmware . setTenantId ( f . getTenantId ( ) ) ;
firmware . setDeviceProfileId ( deviceProfileId ) ;
firmware . setType ( FIRMWARE ) ;
firmware . setTitle ( f . getTitle ( ) ) ;
firmware . setVersion ( f . getVersion ( ) ) ;
firmware . setFileName ( FILE_NAME ) ;
@ -465,7 +614,7 @@ public abstract class BaseFirmwareServiceTest extends AbstractServiceTest {
loadedFirmwares = new ArrayList < > ( ) ;
pageLink = new PageLink ( 16 ) ;
do {
pageData = firmwareService . findTenantFirmwaresByTenantIdAndHasData ( tenantId , true , pageLink ) ;
pageData = firmwareService . findTenantFirmwaresByTenantIdAndDeviceProfileIdAndTypeAnd HasData ( tenantId , deviceProfileId , FIRMWARE , true , pageLink ) ;
loadedFirmwares . addAll ( pageData . getData ( ) ) ;
if ( pageData . hasNext ( ) ) {
pageLink = pageLink . nextPageLink ( ) ;