/*
 * Copyright (c) 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Martin Taal
 */
package org.eclipse.emf.cdo.tests.hibernate;

import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.AbstractCDOTest;
import org.eclipse.emf.cdo.tests.model1.Product1;
import org.eclipse.emf.cdo.transaction.CDOTransaction;

/**
 * Simple test to check that the timestamp is indeed stored. https://bugs.eclipse.org/bugs/show_bug.cgi?id=361792
 *
 * @author Martin Taal
 */
public class HibernateTimeStampTest extends AbstractCDOTest
{

  public void testTimeStamp() throws Exception
  {
    msg("Opening session");
    CDOSession session = openSession();

    CDOID cdoId = null;
    {
      CDOTransaction transaction = session.openTransaction();
      CDOResource resource = transaction.createResource(getResourcePath("/test1"));
      Product1 product = getModel1Factory().createProduct1();
      product.setDescription("Description");
      product.setName("name");
      resource.getContents().add(product);
      transaction.commit();
      cdoId = ((CDOObject)product).cdoID();
    }
    session.close();

    Thread.sleep(500);

    final long checkTimeStamp = System.currentTimeMillis();

    session = openSession();

    CDOTransaction transaction = session.openTransaction();
    final CDOObject cdoObject = transaction.getObject(cdoId);
    final long timeStamp = cdoObject.cdoRevision().getTimeStamp();
    if (checkTimeStamp < timeStamp)
    {
      fail("Timestamp not stored");
    }
    transaction.commit();
  }
}
