/*******************************************************************************
 * Copyright (c) 2013, 2014 Red Hat, Inc. 
 * 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:
 * 		 Red Hat Inc. - initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.thym.core.test;

import java.io.IOException;
import java.util.Date;

import org.apache.http.Header;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.StatusLine;
import org.apache.http.client.cache.HttpCacheEntry;
import org.apache.http.client.cache.Resource;
import org.apache.http.impl.client.cache.HeapResource;
import org.apache.http.impl.cookie.DateUtils;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicStatusLine;
import org.eclipse.thym.core.internal.util.BundleHttpCacheStorage;
import org.eclipse.thym.hybrid.test.Activator;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

@SuppressWarnings("restriction") //test
public class TestBundleHttpStorage {
	
	private BundleHttpCacheStorage cacheStorage;
	
	@Before
	public  void setUp(){
		cacheStorage = new BundleHttpCacheStorage(Activator.getDefault().getBundle());
	}
	
	@Test
	public void testCachePutAndRetrieve() throws IOException{
		HttpCacheEntry entry = makeHttpCacheEntry();
		cacheStorage.putEntry("foo", entry);
		assertNotNull(cacheStorage.getEntry("foo"));
	}

	public void testCachePutAndRemove() throws IOException{
		HttpCacheEntry entry = makeHttpCacheEntry();
		cacheStorage.putEntry("foo", entry);
		assertNotNull(cacheStorage.getEntry("foo"));
		cacheStorage.removeEntry("foo");
		assertNull(cacheStorage.getEntry("foo"));
	}
	
	private HttpCacheEntry makeHttpCacheEntry() {
		final Date now = new Date();
	    final StatusLine statusLine = new BasicStatusLine(HttpVersion.HTTP_1_1, HttpStatus.SC_OK, "OK");
	    final Header[] headers = {
	                new BasicHeader("Date", DateUtils.formatDate(now)),
	                new BasicHeader("Server", "MockServer/1.0")
	     };
	    final Resource resource = new HeapResource(new byte[0]);
		HttpCacheEntry entry = new HttpCacheEntry(now, now, statusLine, headers, resource);
		return entry;
	}
	

}