@ -18,9 +18,9 @@
package org.wso2.carbon.device.mgt.mobile.impl.dao ;
package org.wso2.carbon.device.mgt.mobile.impl.dao ;
import org.apache.commons.dbcp.BasicDataSource ;
import org.apache.commons.logging.Log ;
import org.apache.commons.logging.Log ;
import org.apache.commons.logging.LogFactory ;
import org.apache.commons.logging.LogFactory ;
import org.apache.tomcat.jdbc.pool.PoolProperties ;
import org.testng.Assert ;
import org.testng.Assert ;
import org.testng.annotations.BeforeClass ;
import org.testng.annotations.BeforeClass ;
import org.testng.annotations.Parameters ;
import org.testng.annotations.Parameters ;
@ -36,6 +36,7 @@ import org.wso2.carbon.device.mgt.mobile.impl.common.TestDBConfiguration;
import org.wso2.carbon.device.mgt.mobile.impl.common.TestDBConfigurations ;
import org.wso2.carbon.device.mgt.mobile.impl.common.TestDBConfigurations ;
import org.wso2.carbon.device.mgt.mobile.util.MobileDeviceManagementUtil ;
import org.wso2.carbon.device.mgt.mobile.util.MobileDeviceManagementUtil ;
import javax.sql.DataSource ;
import javax.xml.bind.JAXBContext ;
import javax.xml.bind.JAXBContext ;
import javax.xml.bind.JAXBException ;
import javax.xml.bind.JAXBException ;
import javax.xml.bind.Unmarshaller ;
import javax.xml.bind.Unmarshaller ;
@ -46,237 +47,237 @@ import java.util.List;
public class MobileFeatureDAOTestSuite {
public class MobileFeatureDAOTestSuite {
private static final Log log = LogFactory . getLog ( MobileFeatureDAOTestSuite . class ) ;
private static final Log log = LogFactory . getLog ( MobileFeatureDAOTestSuite . class ) ;
public static final String MBL_FEATURE_NAME = "Camera" ;
public static final String MBL_FEATURE_NAME = "Camera" ;
private static final String MBL_FEATURE_CODE = "500A" ;
private static final String MBL_FEATURE_CODE = "500A" ;
public static final String MBL_FEATURE_DESCRIPTION = "Camera enable or disable" ;
public static final String MBL_FEATURE_DESCRIPTION = "Camera enable or disable" ;
public static final String MBL_FEATURE_UPDATED_CODE = "501B" ;
public static final String MBL_FEATURE_UPDATED_CODE = "501B" ;
private TestDBConfiguration testDBConfiguration ;
private TestDBConfiguration testDBConfiguration ;
private Connection conn = null ;
private Connection conn = null ;
private Statement stmt = null ;
private Statement stmt = null ;
private MobileFeatureDAOImpl mblFeatureDAO ;
private MobileFeatureDAOImpl mblFeatureDAO ;
private int mblFeatureId ;
private int mblFeatureId ;
@BeforeClass
@BeforeClass
@Parameters ( "dbType" )
@Parameters ( "dbType" )
public void setUpDB ( String dbTypeStr ) throws Exception {
public void setUpDB ( String dbTypeStr ) throws Exception {
DBTypes dbType = DBTypes . valueOf ( dbTypeStr ) ;
DBTypes dbType = DBTypes . valueOf ( dbTypeStr ) ;
testDBConfiguration = getTestDBConfiguration ( dbType ) ;
testDBConfiguration = getTestDBConfiguration ( dbType ) ;
switch ( dbType ) {
switch ( dbType ) {
case H2 :
case H2 :
createH2DB ( testDBConfiguration ) ;
createH2DB ( testDBConfiguration ) ;
BasicDataSource testDataSource = new BasicDataSource ( ) ;
DataSource testDataSource = new org . apache . tomcat . jdbc . pool . DataSource ( ) ;
testDataSource . setDriverClassName ( testDBConfiguration . getDriverClass ( ) ) ;
PoolProperties properties = new PoolProperties ( ) ;
testDataSource . setUrl ( testDBConfiguration . getConnectionUrl ( ) ) ;
properties . setUrl ( testDBConfiguration . getConnectionURL ( ) ) ;
testDataSource . setUsername ( testDBConfiguration . getUserName ( ) ) ;
properties . setDriverClassName ( testDBConfiguration . getDriverClassName ( ) ) ;
testDataSource . setPassword ( testDBConfiguration . getPwd ( ) ) ;
properties . setUsername ( testDBConfiguration . getUsername ( ) ) ;
mblFeatureDAO = new MobileFeatureDAOImpl ( testDataSource ) ;
properties . setPassword ( testDBConfiguration . getPassword ( ) ) ;
default :
mblFeatureDAO = new MobileFeatureDAOImpl ( testDataSource ) ;
}
default :
}
}
}
private TestDBConfiguration getTestDBConfiguration ( DBTypes dbType ) throws
private TestDBConfiguration getTestDBConfiguration ( DBTypes dbType ) throws
MobileDeviceManagementDAOException ,
MobileDeviceManagementDAOException ,
DeviceManagementException {
DeviceManagementException {
File deviceMgtConfig = new File ( "src/test/resources/testdbconfig.xml" ) ;
File deviceMgtConfig = new File ( "src/test/resources/testdbconfig.xml" ) ;
Document doc = null ;
Document doc = null ;
testDBConfiguration = null ;
testDBConfiguration = null ;
TestDBConfigurations testDBConfigurations = null ;
TestDBConfigurations testDBConfigurations = null ;
doc = MobileDeviceManagementUtil . convertToDocument ( deviceMgtConfig ) ;
doc = MobileDeviceManagementUtil . convertToDocument ( deviceMgtConfig ) ;
JAXBContext testDBContext = null ;
JAXBContext testDBContext = null ;
try {
try {
testDBContext = JAXBContext . newInstance ( TestDBConfigurations . class ) ;
testDBContext = JAXBContext . newInstance ( TestDBConfigurations . class ) ;
Unmarshaller unmarshaller = testDBContext . createUnmarshaller ( ) ;
Unmarshaller unmarshaller = testDBContext . createUnmarshaller ( ) ;
testDBConfigurations = ( TestDBConfigurations ) unmarshaller . unmarshal ( doc ) ;
testDBConfigurations = ( TestDBConfigurations ) unmarshaller . unmarshal ( doc ) ;
} catch ( JAXBException e ) {
} catch ( JAXBException e ) {
throw new MobileDeviceManagementDAOException ( "Error parsing test db configurations" , e ) ;
throw new MobileDeviceManagementDAOException ( "Error parsing test db configurations" , e ) ;
}
}
Iterator < TestDBConfiguration > itrDBConfigs =
Iterator < TestDBConfiguration > itrDBConfigs =
testDBConfigurations . getDbTypesList ( ) . iterator ( ) ;
testDBConfigurations . getDbTypesList ( ) . iterator ( ) ;
while ( itrDBConfigs . hasNext ( ) ) {
while ( itrDBConfigs . hasNext ( ) ) {
testDBConfiguration = itrDBConfigs . next ( ) ;
testDBConfiguration = itrDBConfigs . next ( ) ;
if ( testDBConfiguration . get Db Type( ) . equals ( dbType . toString ( ) ) ) {
if ( testDBConfiguration . get Type( ) . equals ( dbType . toString ( ) ) ) {
break ;
break ;
}
}
}
}
return testDBConfiguration ;
return testDBConfiguration ;
}
}
private void createH2DB ( TestDBConfiguration testDBConf ) throws Exception {
private void createH2DB ( TestDBConfiguration testDBConf ) throws Exception {
Class . forName ( testDBConf . getDriverClass ( ) ) ;
Class . forName ( testDBConf . getDriverClass Name ( ) ) ;
conn = DriverManager . getConnection ( testDBConf . getConnectionU rl ( ) ) ;
conn = DriverManager . getConnection ( testDBConf . getConnectionU RL ( ) ) ;
stmt = conn . createStatement ( ) ;
stmt = conn . createStatement ( ) ;
stmt . executeUpdate ( "RUNSCRIPT FROM './src/test/resources/sql/CreateH2TestDB.sql'" ) ;
stmt . executeUpdate ( "RUNSCRIPT FROM './src/test/resources/sql/CreateH2TestDB.sql'" ) ;
stmt . close ( ) ;
stmt . close ( ) ;
conn . close ( ) ;
conn . close ( ) ;
}
}
@Test
@Test
public void addMobileFeatureTest ( )
public void addMobileFeatureTest ( )
throws MobileDeviceManagementDAOException {
throws MobileDeviceManagementDAOException {
MobileFeature mobileFeature = new MobileFeature ( ) ;
MobileFeature mobileFeature = new MobileFeature ( ) ;
MobileFeature testMblFeature = new MobileFeature ( ) ;
MobileFeature testMblFeature = new MobileFeature ( ) ;
mobileFeature . setCode ( MBL_FEATURE_CODE ) ;
mobileFeature . setCode ( MBL_FEATURE_CODE ) ;
mobileFeature . setDescription ( MBL_FEATURE_DESCRIPTION ) ;
mobileFeature . setDescription ( MBL_FEATURE_DESCRIPTION ) ;
mobileFeature . setName ( MBL_FEATURE_NAME ) ;
mobileFeature . setName ( MBL_FEATURE_NAME ) ;
boolean added = mblFeatureDAO . addMobileFeature ( mobileFeature ) ;
boolean added = mblFeatureDAO . addMobileFeature ( mobileFeature ) ;
try {
try {
conn = DriverManager . getConnection ( testDBConfiguration . getConnectionU rl ( ) ) ;
conn = DriverManager . getConnection ( testDBConfiguration . getConnectionU RL ( ) ) ;
stmt = conn . createStatement ( ) ;
stmt = conn . createStatement ( ) ;
ResultSet resultSet = stmt
ResultSet resultSet = stmt
. executeQuery (
. executeQuery (
"SELECT FEATURE_ID, CODE, NAME, DESCRIPTION FROM MBL_FEATURE WHERE CODE = '500A'" ) ;
"SELECT FEATURE_ID, CODE, NAME, DESCRIPTION FROM MBL_FEATURE WHERE CODE = '500A'" ) ;
while ( resultSet . next ( ) ) {
while ( resultSet . next ( ) ) {
testMblFeature . setId ( resultSet . getInt ( 1 ) ) ;
testMblFeature . setId ( resultSet . getInt ( 1 ) ) ;
testMblFeature . setCode ( resultSet . getString ( 2 ) ) ;
testMblFeature . setCode ( resultSet . getString ( 2 ) ) ;
testMblFeature . setName ( resultSet . getString ( 3 ) ) ;
testMblFeature . setName ( resultSet . getString ( 3 ) ) ;
testMblFeature . setDescription ( resultSet . getString ( 4 ) ) ;
testMblFeature . setDescription ( resultSet . getString ( 4 ) ) ;
}
}
conn . close ( ) ;
conn . close ( ) ;
} catch ( SQLException e ) {
} catch ( SQLException e ) {
log . error ( "Error in retrieving Mobile Feature data " , e ) ;
log . error ( "Error in retrieving Mobile Feature data " , e ) ;
throw new MobileDeviceManagementDAOException ( "Error in retrieving Mobile Feature data " ,
throw new MobileDeviceManagementDAOException ( "Error in retrieving Mobile Feature data " ,
e ) ;
e ) ;
} finally {
} finally {
TestUtils . cleanupResources ( conn , stmt , null ) ;
TestUtils . cleanupResources ( conn , stmt , null ) ;
}
}
mblFeatureId = testMblFeature . getId ( ) ;
mblFeatureId = testMblFeature . getId ( ) ;
Assert . assertTrue ( added , "MobileFeature is added" ) ;
Assert . assertTrue ( added , "MobileFeature is added" ) ;
Assert . assertEquals ( MBL_FEATURE_CODE , testMblFeature . getCode ( ) ,
Assert . assertEquals ( MBL_FEATURE_CODE , testMblFeature . getCode ( ) ,
"MobileFeature code has persisted successfully" ) ;
"MobileFeature code has persisted successfully" ) ;
Assert . assertEquals ( MBL_FEATURE_NAME , testMblFeature . getName ( ) ,
Assert . assertEquals ( MBL_FEATURE_NAME , testMblFeature . getName ( ) ,
"MobileFeature name has persisted successfully" ) ;
"MobileFeature name has persisted successfully" ) ;
Assert . assertEquals ( MBL_FEATURE_DESCRIPTION , testMblFeature . getDescription ( ) ,
Assert . assertEquals ( MBL_FEATURE_DESCRIPTION , testMblFeature . getDescription ( ) ,
"MobileFeature description has persisted successfully" ) ;
"MobileFeature description has persisted successfully" ) ;
}
}
@Test ( dependsOnMethods = { "addMobileFeatureTest" } )
@Test ( dependsOnMethods = { "addMobileFeatureTest" } )
public void getMobileFeatureByCodeTest ( )
public void getMobileFeatureByCodeTest ( )
throws MobileDeviceManagementDAOException {
throws MobileDeviceManagementDAOException {
MobileFeature mobileFeature = mblFeatureDAO . getMobileFeatureByCode ( MBL_FEATURE_CODE ) ;
MobileFeature mobileFeature = mblFeatureDAO . getMobileFeatureByCode ( MBL_FEATURE_CODE ) ;
Assert . assertEquals ( MBL_FEATURE_CODE , mobileFeature . getCode ( ) ,
Assert . assertEquals ( MBL_FEATURE_CODE , mobileFeature . getCode ( ) ,
"MobileFeature code has retrieved successfully" ) ;
"MobileFeature code has retrieved successfully" ) ;
Assert . assertEquals ( MBL_FEATURE_NAME , mobileFeature . getName ( ) ,
Assert . assertEquals ( MBL_FEATURE_NAME , mobileFeature . getName ( ) ,
"MobileFeature name has retrieved successfully" ) ;
"MobileFeature name has retrieved successfully" ) ;
Assert . assertEquals ( MBL_FEATURE_DESCRIPTION , mobileFeature . getDescription ( ) ,
Assert . assertEquals ( MBL_FEATURE_DESCRIPTION , mobileFeature . getDescription ( ) ,
"MobileFeature description has retrieved successfully" ) ;
"MobileFeature description has retrieved successfully" ) ;
}
}
@Test ( dependsOnMethods = { "addMobileFeatureTest" } )
@Test ( dependsOnMethods = { "addMobileFeatureTest" } )
public void deleteMobileFeatureByCodeTest ( )
public void deleteMobileFeatureByCodeTest ( )
throws MobileDeviceManagementDAOException {
throws MobileDeviceManagementDAOException {
boolean status = mblFeatureDAO . deleteMobileFeatureByCode ( MBL_FEATURE_CODE ) ;
boolean status = mblFeatureDAO . deleteMobileFeatureByCode ( MBL_FEATURE_CODE ) ;
try {
try {
conn = DriverManager . getConnection ( testDBConfiguration . getConnectionU rl ( ) ) ;
conn = DriverManager . getConnection ( testDBConfiguration . getConnectionU RL ( ) ) ;
stmt = conn . createStatement ( ) ;
stmt = conn . createStatement ( ) ;
ResultSet resultSet = stmt
ResultSet resultSet = stmt
. executeQuery (
. executeQuery (
"SELECT FEATURE_ID, CODE FROM MBL_FEATURE WHERE CODE = '500A'" ) ;
"SELECT FEATURE_ID, CODE FROM MBL_FEATURE WHERE CODE = '500A'" ) ;
while ( resultSet . next ( ) ) {
while ( resultSet . next ( ) ) {
status = false ;
status = false ;
}
}
conn . close ( ) ;
conn . close ( ) ;
} catch ( SQLException e ) {
} catch ( SQLException e ) {
log . error ( "Error in deleting Mobile Feature data " , e ) ;
log . error ( "Error in deleting Mobile Feature data " , e ) ;
throw new MobileDeviceManagementDAOException ( "Error in deleting Mobile Feature data " ,
throw new MobileDeviceManagementDAOException ( "Error in deleting Mobile Feature data " ,
e ) ;
e ) ;
} finally {
} finally {
TestUtils . cleanupResources ( conn , stmt , null ) ;
TestUtils . cleanupResources ( conn , stmt , null ) ;
}
}
Assert . assertTrue ( status , "MobileFeature has deleted successfully" ) ;
Assert . assertTrue ( status , "MobileFeature has deleted successfully" ) ;
}
}
@Test ( dependsOnMethods = { "addMobileFeatureTest" } )
@Test ( dependsOnMethods = { "addMobileFeatureTest" } )
public void getMobileFeatureByIdTest ( )
public void getMobileFeatureByIdTest ( )
throws MobileDeviceManagementDAOException {
throws MobileDeviceManagementDAOException {
MobileFeature mobileFeature = mblFeatureDAO . getMobileFeatureById ( mblFeatureId ) ;
MobileFeature mobileFeature = mblFeatureDAO . getMobileFeatureById ( mblFeatureId ) ;
Assert . assertEquals ( MBL_FEATURE_CODE , mobileFeature . getCode ( ) ,
Assert . assertEquals ( MBL_FEATURE_CODE , mobileFeature . getCode ( ) ,
"MobileFeature code has retrieved successfully" ) ;
"MobileFeature code has retrieved successfully" ) ;
Assert . assertEquals ( MBL_FEATURE_NAME , mobileFeature . getName ( ) ,
Assert . assertEquals ( MBL_FEATURE_NAME , mobileFeature . getName ( ) ,
"MobileFeature name has retrieved successfully" ) ;
"MobileFeature name has retrieved successfully" ) ;
Assert . assertEquals ( MBL_FEATURE_DESCRIPTION , mobileFeature . getDescription ( ) ,
Assert . assertEquals ( MBL_FEATURE_DESCRIPTION , mobileFeature . getDescription ( ) ,
"MobileFeature description has retrieved successfully" ) ;
"MobileFeature description has retrieved successfully" ) ;
}
}
@Test ( dependsOnMethods = { "addMobileFeatureTest" } )
@Test ( dependsOnMethods = { "addMobileFeatureTest" } )
public void getAllMobileFeaturesTest ( )
public void getAllMobileFeaturesTest ( )
throws MobileDeviceManagementDAOException {
throws MobileDeviceManagementDAOException {
List < MobileFeature > mobileFeatures = mblFeatureDAO . getAllMobileFeatures ( ) ;
List < MobileFeature > mobileFeatures = mblFeatureDAO . getAllMobileFeatures ( ) ;
Assert . assertNotNull ( mobileFeatures , "MobileFeature list is not null" ) ;
Assert . assertNotNull ( mobileFeatures , "MobileFeature list is not null" ) ;
Assert . assertTrue ( mobileFeatures . size ( ) > 0 , "MobileFeature list has 1 MobileFeature" ) ;
Assert . assertTrue ( mobileFeatures . size ( ) > 0 , "MobileFeature list has 1 MobileFeature" ) ;
}
}
@Test ( dependsOnMethods = { "addMobileFeatureTest" } )
@Test ( dependsOnMethods = { "addMobileFeatureTest" } )
public void deleteMobileFeatureByIdTest ( )
public void deleteMobileFeatureByIdTest ( )
throws MobileDeviceManagementDAOException {
throws MobileDeviceManagementDAOException {
boolean status = mblFeatureDAO . deleteMobileFeatureById ( mblFeatureId ) ;
boolean status = mblFeatureDAO . deleteMobileFeatureById ( mblFeatureId ) ;
try {
try {
conn = DriverManager . getConnection ( testDBConfiguration . getConnectionUrl ( ) ) ;
conn = DriverManager . getConnection ( testDBConfiguration . getConnectionURL ( ) ) ;
stmt = conn . createStatement ( ) ;
ResultSet resultSet = stmt
ResultSet resultSet = stmt
. executeQuery (
. executeQuery (
"SELECT FEATURE_ID, CODE FROM MBL_FEATURE WHERE FEATURE_ID = " +
"SELECT FEATURE_ID, CODE FROM MBL_FEATURE WHERE FEATURE_ID = " +
mblFeatureId ) ;
mblFeatureId ) ;
while ( resultSet . next ( ) ) {
while ( resultSet . next ( ) ) {
status = false ;
status = false ;
}
}
conn . close ( ) ;
conn . close ( ) ;
} catch ( SQLException e ) {
} catch ( SQLException e ) {
log . error ( "Error in deleting Mobile Feature data " , e ) ;
log . error ( "Error in deleting Mobile Feature data " , e ) ;
throw new MobileDeviceManagementDAOException ( "Error in deleting Mobile Feature data " ,
throw new MobileDeviceManagementDAOException ( "Error in deleting Mobile Feature data " ,
e ) ;
e ) ;
} finally {
} finally {
TestUtils . cleanupResources ( conn , stmt , null ) ;
TestUtils . cleanupResources ( conn , stmt , null ) ;
}
}
Assert . assertTrue ( status , "MobileFeature has deleted successfully" ) ;
Assert . assertTrue ( status , "MobileFeature has deleted successfully" ) ;
}
}
@Test ( dependsOnMethods = { "deleteMobileFeatureByCodeTest" , "addMobileFeatureTest" } )
@Test ( dependsOnMethods = { "deleteMobileFeatureByCodeTest" , "addMobileFeatureTest" } )
public void updateMobileFeatureTest ( )
public void updateMobileFeatureTest ( )
throws MobileDeviceManagementDAOException {
throws MobileDeviceManagementDAOException {
MobileFeature mobileFeature = new MobileFeature ( ) ;
MobileFeature mobileFeature = new MobileFeature ( ) ;
MobileFeature testMblFeature = new MobileFeature ( ) ;
MobileFeature testMblFeature = new MobileFeature ( ) ;
mobileFeature . setCode ( MBL_FEATURE_UPDATED_CODE ) ;
mobileFeature . setCode ( MBL_FEATURE_UPDATED_CODE ) ;
mobileFeature . setDescription ( MBL_FEATURE_DESCRIPTION ) ;
mobileFeature . setDescription ( MBL_FEATURE_DESCRIPTION ) ;
mobileFeature . setName ( MBL_FEATURE_NAME ) ;
mobileFeature . setName ( MBL_FEATURE_NAME ) ;
mobileFeature . setId ( mblFeatureId ) ;
mobileFeature . setId ( mblFeatureId ) ;
boolean updated = mblFeatureDAO . updateMobileFeature ( mobileFeature ) ;
boolean updated = mblFeatureDAO . updateMobileFeature ( mobileFeature ) ;
try {
try {
conn = DriverManager . getConnection ( testDBConfiguration . get ConnectionUrl ( ) ) ;
conn = DriverManager . getConnection ( testDBConfiguration . get DriverClassName ( ) ) ;
stmt = conn . createStatement ( ) ;
stmt = conn . createStatement ( ) ;
ResultSet resultSet = stmt
ResultSet resultSet = stmt
. executeQuery (
. executeQuery (
"SELECT FEATURE_ID, CODE, NAME, DESCRIPTION FROM MBL_FEATURE WHERE CODE = '" +
"SELECT FEATURE_ID, CODE, NAME, DESCRIPTION FROM MBL_FEATURE WHERE CODE = '" +
MBL_FEATURE_UPDATED_CODE + "'" ) ;
MBL_FEATURE_UPDATED_CODE + "'" ) ;
while ( resultSet . next ( ) ) {
while ( resultSet . next ( ) ) {
testMblFeature . setId ( resultSet . getInt ( 1 ) ) ;
testMblFeature . setId ( resultSet . getInt ( 1 ) ) ;
testMblFeature . setCode ( resultSet . getString ( 2 ) ) ;
testMblFeature . setCode ( resultSet . getString ( 2 ) ) ;
testMblFeature . setName ( resultSet . getString ( 3 ) ) ;
testMblFeature . setName ( resultSet . getString ( 3 ) ) ;
testMblFeature . setDescription ( resultSet . getString ( 4 ) ) ;
testMblFeature . setDescription ( resultSet . getString ( 4 ) ) ;
}
}
conn . close ( ) ;
conn . close ( ) ;
} catch ( SQLException e ) {
} catch ( SQLException e ) {
log . error ( "Error in updating Mobile Feature data " , e ) ;
log . error ( "Error in updating Mobile Feature data " , e ) ;
throw new MobileDeviceManagementDAOException ( "Error in updating Mobile Feature data " ,
throw new MobileDeviceManagementDAOException ( "Error in updating Mobile Feature data " ,
e ) ;
e ) ;
} finally {
} finally {
TestUtils . cleanupResources ( conn , stmt , null ) ;
TestUtils . cleanupResources ( conn , stmt , null ) ;
}
}
Assert . assertTrue ( updated , "MobileFeature has updated" ) ;
Assert . assertTrue ( updated , "MobileFeature has updated" ) ;
Assert . assertEquals ( MBL_FEATURE_UPDATED_CODE , testMblFeature . getCode ( ) ,
Assert . assertEquals ( MBL_FEATURE_UPDATED_CODE , testMblFeature . getCode ( ) ,
"MobileFeature data has updated successfully" ) ;
"MobileFeature data has updated successfully" ) ;
}
}
}
}