diff --git a/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py b/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py
index 35400b0..3770da7 100644
--- a/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py
+++ b/erpnext/hr/doctype/vehicle_log/test_vehicle_log.py
@@ -8,25 +8,9 @@
 from frappe.utils import nowdate,flt, cstr,random_string
 # test_records = frappe.get_test_records('Vehicle Log')
 class TestVehicleLog(unittest.TestCase):
-	def test_make_vehicle_log(self):
-		license_plate=random_string(10).upper()
+	def test_make_vehicle_log_and_syncing_of_odometer_value(self):
 		employee_id=frappe.db.sql("""select name from `tabEmployee` order by modified desc limit 1""")[0][0]
-		vehicle = frappe.get_doc({
-			"doctype": "Vehicle",
-			"license_plate": cstr(license_plate),
-			"make": "Maruti",
-			"model": "PCM",
-			"last_odometer":5000,
-			"acquisition_date":frappe.utils.nowdate(),
-			"location": "Mumbai",
-			"chassis_no": "1234ABCD",
-			"uom": "Litre",
-			"vehicle_value":frappe.utils.flt(500000)
-		})
-		try:
-			vehicle.insert()
-		except frappe.DuplicateEntryError:
-			pass
+		license_plate = get_vehicle(employee_id)
 		vehicle_log = frappe.get_doc({
 			"doctype": "Vehicle Log",
 			"license_plate": cstr(license_plate),
@@ -36,5 +20,41 @@
 			"fuel_qty":frappe.utils.flt(50),
 			"price": frappe.utils.flt(500)
 		})
-		vehicle_log.insert()
-		vehicle_log.submit()
\ No newline at end of file
+		vehicle_log.save()
+		vehicle_log.submit()
+
+		#checking value of vehicle odometer value on submit.
+		vehicle = frappe.get_doc("Vehicle", license_plate)
+		self.assertEqual(vehicle.last_odometer, vehicle_log.odometer)
+
+		#checking value vehicle odometer on vehicle log cancellation.
+		last_odometer = vehicle_log.last_odometer
+		current_odometer = vehicle_log.odometer
+		distance_travelled = current_odometer - last_odometer
+
+		vehicle_log.cancel()
+		vehicle.reload()
+
+		self.assertEqual(vehicle.last_odometer, current_odometer - distance_travelled)
+
+
+def get_vehicle(employee_id):
+	license_plate=random_string(10).upper()
+	vehicle = frappe.get_doc({
+			"doctype": "Vehicle",
+			"license_plate": cstr(license_plate),
+			"make": "Maruti",
+			"model": "PCM",
+			"employee": employee_id,
+			"last_odometer":5000,
+			"acquisition_date":frappe.utils.nowdate(),
+			"location": "Mumbai",
+			"chassis_no": "1234ABCD",
+			"uom": "Litre",
+			"vehicle_value":frappe.utils.flt(500000)
+		})
+	try:
+		vehicle.insert()
+	except frappe.DuplicateEntryError:
+		pass
+	return license_plate
\ No newline at end of file
diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.py b/erpnext/hr/doctype/vehicle_log/vehicle_log.py
index dfdfc0d..12cc1dd 100644
--- a/erpnext/hr/doctype/vehicle_log/vehicle_log.py
+++ b/erpnext/hr/doctype/vehicle_log/vehicle_log.py
@@ -18,7 +18,7 @@
 					if not (service_detail.service_item and service_detail.type and service_detail.frequency and service_detail.expense_amount):
 							frappe.throw(_("Service Item,Type,frequency and expense amount are required"))
 
-	def before_save(self):
+	def before_insert(self):
 		model_details = get_make_model(self.license_plate)
 		self.make = model_details[0]
 		self.model = model_details[1]
