summaryrefslogtreecommitdiffstats
path: root/dom/system/gonk/VolumeServiceTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'dom/system/gonk/VolumeServiceTest.cpp')
-rw-r--r--dom/system/gonk/VolumeServiceTest.cpp202
1 files changed, 202 insertions, 0 deletions
diff --git a/dom/system/gonk/VolumeServiceTest.cpp b/dom/system/gonk/VolumeServiceTest.cpp
new file mode 100644
index 000000000..4082e3889
--- /dev/null
+++ b/dom/system/gonk/VolumeServiceTest.cpp
@@ -0,0 +1,202 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "VolumeServiceTest.h"
+
+#include "base/message_loop.h"
+#include "nsCOMPtr.h"
+#include "nsIObserver.h"
+#include "nsIObserverService.h"
+#include "nsServiceManagerUtils.h"
+#include "nsThreadUtils.h"
+#include "nsIVolume.h"
+#include "nsIVolumeService.h"
+#include "nsIVolumeStat.h"
+#include "nsXULAppAPI.h"
+
+#include "mozilla/Services.h"
+
+#undef VOLUME_MANAGER_LOG_TAG
+#define VOLUME_MANAGER_LOG_TAG "VolumeServiceTest"
+#include "VolumeManagerLog.h"
+
+using namespace mozilla::services;
+
+namespace mozilla {
+namespace system {
+
+#define TEST_NSVOLUME_OBSERVER 0
+
+#if TEST_NSVOLUME_OBSERVER
+
+/***************************************************************************
+* A test class to verify that the Observer stuff is working properly.
+*/
+class VolumeTestObserver : public nsIObserver
+{
+public:
+ NS_DECL_ISUPPORTS
+ NS_DECL_NSIOBSERVER
+
+ VolumeTestObserver()
+ {
+ nsCOMPtr<nsIObserverService> obs = GetObserverService();
+ if (!obs) {
+ return;
+ }
+ obs->AddObserver(this, NS_VOLUME_STATE_CHANGED, false);
+ }
+ ~VolumeTestObserver()
+ {
+ nsCOMPtr<nsIObserverService> obs = GetObserverService();
+ if (!obs) {
+ return;
+ }
+ obs->RemoveObserver(this, NS_VOLUME_STATE_CHANGED);
+ }
+
+ void LogVolume(nsIVolume* vol)
+ {
+ nsString volName;
+ nsString mountPoint;
+ int32_t volState;
+
+ vol->GetName(volName);
+ vol->GetMountPoint(mountPoint);
+ vol->GetState(&volState);
+
+ LOG(" Volume: %s MountPoint: %s State: %s",
+ NS_LossyConvertUTF16toASCII(volName).get(),
+ NS_LossyConvertUTF16toASCII(mountPoint).get(),
+ NS_VolumeStateStr(volState));
+
+ nsCOMPtr<nsIVolumeStat> stat;
+ nsresult rv = vol->GetStats(getter_AddRefs(stat));
+ if (NS_SUCCEEDED(rv)) {
+ int64_t totalBytes;
+ int64_t freeBytes;
+
+ stat->GetTotalBytes(&totalBytes);
+ stat->GetFreeBytes(&freeBytes);
+
+ LOG(" Total Space: %llu Mb Free Bytes: %llu Mb",
+ totalBytes / (1024LL * 1024LL), freeBytes / (1024LL * 1024LL));
+ }
+ else {
+ LOG(" Unable to retrieve stats");
+ }
+ }
+};
+static nsCOMPtr<VolumeTestObserver> sTestObserver;
+
+NS_IMPL_ISUPPORTS(VolumeTestObserver, nsIObserver)
+
+NS_IMETHODIMP
+VolumeTestObserver::Observe(nsISupports* aSubject,
+ const char* aTopic,
+ const char16_t* aData)
+{
+ LOG("TestObserver: topic: %s", aTopic);
+
+ if (strcmp(aTopic, NS_VOLUME_STATE_CHANGED) != 0) {
+ return NS_OK;
+ }
+ nsCOMPtr<nsIVolume> vol = do_QueryInterface(aSubject);
+ if (vol) {
+ LogVolume(vol);
+ }
+
+ // Since this observe method was called then we know that the service
+ // has been initialized so we can do the VolumeService tests.
+
+ nsCOMPtr<nsIVolumeService> vs = do_GetService(NS_VOLUMESERVICE_CONTRACTID);
+ if (!vs) {
+ ERR("do_GetService('%s') failed", NS_VOLUMESERVICE_CONTRACTID);
+ return NS_ERROR_FAILURE;
+ }
+
+ nsresult rv = vs->GetVolumeByName(NS_LITERAL_STRING("sdcard"), getter_AddRefs(vol));
+ if (NS_SUCCEEDED(rv)) {
+ LOG("GetVolumeByName( 'sdcard' ) succeeded (expected)");
+ LogVolume(vol);
+ } else {
+ ERR("GetVolumeByName( 'sdcard' ) failed (unexpected)");
+ }
+
+ rv = vs->GetVolumeByName(NS_LITERAL_STRING("foo"), getter_AddRefs(vol));
+ if (NS_SUCCEEDED(rv)) {
+ ERR("GetVolumeByName( 'foo' ) succeeded (unexpected)");
+ } else {
+ LOG("GetVolumeByName( 'foo' ) failed (expected)");
+ }
+
+ rv = vs->GetVolumeByPath(NS_LITERAL_STRING("/mnt/sdcard"), getter_AddRefs(vol));
+ if (NS_SUCCEEDED(rv)) {
+ LOG("GetVolumeByPath( '/mnt/sdcard' ) succeeded (expected)");
+ LogVolume(vol);
+ } else {
+ ERR("GetVolumeByPath( '/mnt/sdcard' ) failed (unexpected");
+ }
+
+ rv = vs->GetVolumeByPath(NS_LITERAL_STRING("/mnt/sdcard/foo"), getter_AddRefs(vol));
+ if (NS_SUCCEEDED(rv)) {
+ LOG("GetVolumeByPath( '/mnt/sdcard/foo' ) succeeded (expected)");
+ LogVolume(vol);
+ } else {
+ LOG("GetVolumeByPath( '/mnt/sdcard/foo' ) failed (unexpected)");
+ }
+
+ rv = vs->GetVolumeByPath(NS_LITERAL_STRING("/mnt/sdcardfoo"), getter_AddRefs(vol));
+ if (NS_SUCCEEDED(rv)) {
+ ERR("GetVolumeByPath( '/mnt/sdcardfoo' ) succeeded (unexpected)");
+ } else {
+ LOG("GetVolumeByPath( '/mnt/sdcardfoo' ) failed (expected)");
+ }
+
+ return NS_OK;
+}
+
+class InitVolumeServiceTestIO : public Runnable
+{
+public:
+ NS_IMETHOD Run() override
+ {
+ MOZ_ASSERT(NS_IsMainThread());
+
+ DBG("InitVolumeServiceTest called");
+ nsCOMPtr<nsIVolumeService> vs = do_GetService(NS_VOLUMESERVICE_CONTRACTID);
+ if (!vs) {
+ ERR("do_GetService('%s') failed", NS_VOLUMESERVICE_CONTRACTID);
+ return NS_ERROR_FAILURE;
+ }
+ sTestObserver = new VolumeTestObserver();
+
+ return NS_OK;
+ }
+};
+#endif // TEST_NSVOLUME_OBSERVER
+
+void
+InitVolumeServiceTestIOThread()
+{
+ MOZ_ASSERT(MessageLoop::current() == XRE_GetIOMessageLoop());
+
+#if TEST_NSVOLUME_OBSERVER
+ // Now that the volume manager is initialized we can go
+ // ahead and do our test (on main thread).
+ NS_DispatchToMainThread(new InitVolumeServiceTestIO());
+#endif
+}
+
+void
+ShutdownVolumeServiceTest()
+{
+#if TEST_NSVOLUME_OBSERVER
+ DBG("ShutdownVolumeServiceTestIOThread called");
+ sTestObserver = nullptr;
+#endif
+}
+
+} // system
+} // mozilla