/*
- * Copyright (C) 1996-2015 The Squid Software Foundation and contributors
+ * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
#include "squid.h"
#include "ConfigParser.h"
#include "DiskIO/DiskIOModule.h"
+#include "fde.h"
#include "fs/rock/RockSwapDir.h"
#include "globals.h"
#include "HttpHeader.h"
#include <unistd.h>
#endif
-#define TESTDIR "testRock_Store"
+#define TESTDIR "tr"
CPPUNIT_TEST_SUITE_REGISTRATION( testRock );
static void
addSwapDir(testRock::SwapDirPointer aStore)
{
- allocate_new_swapdir(&Config.cacheSwap);
+ allocate_new_swapdir(Config.cacheSwap);
Config.cacheSwap.swapDirs[Config.cacheSwap.n_configured] = aStore.getRaw();
++Config.cacheSwap.n_configured;
}
if (0 > system ("rm -rf " TESTDIR))
throw std::runtime_error("Failed to clean test work directory");
+ Config.memShared.defaultTo(false);
+ Config.shmLocking.defaultTo(false);
+
// use current directory for shared segments (on path-based OSes)
Ipc::Mem::Segment::BasePath = getcwd(cwd,MAXPATHLEN);
if (Ipc::Mem::Segment::BasePath == NULL)
Mem::Init();
+ fde::Init();
+
comm_init();
httpHeaderInitModule(); /* must go before any header processing (e.g. the one in errorInitialize) */
- httpReplyInitModule(); /* must go before accepting replies */
-
mem_policy = createRemovalPolicy(Config.replPolicy);
inited = true;
flags.cachable = true;
StoreEntry *const pe =
storeCreateEntry(storeId(i), "dummy log url", flags, Http::METHOD_GET);
- HttpReply *const rep = const_cast<HttpReply *>(pe->getReply());
- rep->setHeaders(Http::scOkay, "dummy test object", "x-squid-internal/test", 0, -1, squid_curtime + 100000);
+ auto &rep = pe->mem().adjustableBaseReply();
+ rep.setHeaders(Http::scOkay, "dummy test object", "x-squid-internal/test", 0, -1, squid_curtime + 100000);
pe->setPublicKey();
StoreEntry *const pe = createEntry(i);
pe->buffer();
- pe->getReply()->packHeadersInto(pe);
+ pe->mem().freshestReply().packHeadersUsingSlowPacker(*pe);
pe->flush();
pe->timestampsSet();
pe->complete();
// try to swap out entry to a used unlocked slot
{
- StoreEntry *const pe = addEntry(4);
+ // without marking the old entry as deleted
+ StoreEntry *const pe = addEntry(3);
- CPPUNIT_ASSERT_EQUAL(SWAPOUT_WRITING, pe->swap_status);
- CPPUNIT_ASSERT_EQUAL(0, pe->swap_dirn);
- CPPUNIT_ASSERT(pe->swap_filen >= 0);
+ CPPUNIT_ASSERT_EQUAL(SWAPOUT_NONE, pe->swap_status);
+ CPPUNIT_ASSERT_EQUAL(-1, pe->swap_dirn);
+ CPPUNIT_ASSERT_EQUAL(-1, pe->swap_filen);
+ pe->unlock("testRock::testRockSwapOut e#3");
+
+ // after marking the old entry as deleted
+ StoreEntry *const pe2 = getEntry(4);
+ CPPUNIT_ASSERT(pe2 != nullptr);
+ pe2->release();
+
+ StoreEntry *const pe3 = addEntry(4);
+ CPPUNIT_ASSERT_EQUAL(SWAPOUT_WRITING, pe3->swap_status);
+ CPPUNIT_ASSERT_EQUAL(0, pe3->swap_dirn);
+ CPPUNIT_ASSERT(pe3->swap_filen >= 0);
StockEventLoop loop;
loop.run();
- CPPUNIT_ASSERT_EQUAL(SWAPOUT_DONE, pe->swap_status);
+ CPPUNIT_ASSERT_EQUAL(SWAPOUT_DONE, pe3->swap_status);
pe->unlock("testRock::testRockSwapOut e#4");
}