/*
 * Licensed to Elasticsearch under one or more contributor
 * license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright
 * ownership. Elasticsearch licenses this file to you under
 * the Apache License, Version 2.0 (the "License"); you may
 * not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.elasticsearch.env;

import org.elasticsearch.test.ESTestCase;

import java.io.IOException;
import java.nio.file.FileStore;
import java.nio.file.attribute.FileAttributeView;
import java.nio.file.attribute.FileStoreAttributeView;

public class ESFileStoreTests extends ESTestCase {
    static class MockFileStore extends FileStore {

        public long usableSpace = -1;

        @Override
        public String type() {
            return "mock";
        }

        @Override
        public String name() {
            return "mock";
        }

        @Override
        public String toString() {
            return "mock";
        }

        @Override
        public boolean isReadOnly() {
            return false;
        }

        @Override
        public long getTotalSpace() throws IOException {
            return usableSpace*3;
        }

        @Override
        public long getUsableSpace() throws IOException {
            return usableSpace;
        }

        @Override
        public long getUnallocatedSpace() throws IOException {
            return usableSpace*2;
        }

        @Override
        public boolean supportsFileAttributeView(Class<? extends FileAttributeView> type) {
            return false;
        }

        @Override
        public boolean supportsFileAttributeView(String name) {
            return false;
        }

        @Override
        public <V extends FileStoreAttributeView> V getFileStoreAttributeView(Class<V> type) {
            return null;
        }

        @Override
        public Object getAttribute(String attribute) throws IOException {
            return null;
        }
    }

    public void testNegativeSpace() throws Exception {
        FileStore store = new ESFileStore(new MockFileStore());
        assertEquals(Long.MAX_VALUE, store.getUsableSpace());
        assertEquals(Long.MAX_VALUE, store.getTotalSpace());
        assertEquals(Long.MAX_VALUE, store.getUnallocatedSpace());
    }
}

@@ -1027,799 +1027,168 @@
 w;%0A%0A
-public class ESFileStoreTests extends ESTestCase %7B%0A    static class MockFileStore extends FileStore %7B%0A%0A        public long usableSpace = -1;%0A%0A        @Override%0A        public String type() %7B%0A            return %22mock%22;%0A        %7D%0A%0A        @Override%0A        public String name() %7B%0A            return %22mock%22;%0A        %7D%0A%0A        @Override%0A        public String toString() %7B%0A            return %22mock%22;%0A        %7D%0A%0A        @Override%0A        public boolean isReadOnly() %7B%0A            return false;%0A        %7D%0A%0A        @Override%0A        public long getTotalSpace() throws IOException %7B%0A            return usableSpace*3;%0A        %7D%0A%0A        @Override%0A        public long getUsableSpace() throws IOException %7B%0A            return usableSpace;%0A        %7D%0A%0A        @Override%0A  
+import static org.mockito.Mockito.mock;%0Aimport static org.mockito.Mockito.when;%0A%0Apublic class ESFileStoreTests extends ESTestCase %7B%0A
     
-  
 public 
-long getUnallocated
+void testNegative
 Spac
@@ -1190,34 +1190,32 @@
 eSpace() throws 
-IO
 Exception %7B%0A    
@@ -1222,648 +1222,269 @@
     
-  
-  return usableSpace*2;%0A        %7D%0A%0A        @Override%0A        public boolean supportsFileAttributeView(Class%3C? extends FileAttributeView%3E type) %7B%0A            return false;%0A        %7D%0A%0A        @Override%0A        public boolean supportsFileAttributeView(String name) %7B%0A            return false;%0A        %7D%0A%0A        @Override%0A        public %3CV extends FileStoreAttributeView%3E V getFileStoreAttributeView(Class%3CV%3E type) %7B%0A            return null;%0A        %7D%0A%0A        @Override%0A        public Object getAttribute(String attribute) throws IOException %7B%0A            return null;%0A        %7D%0A    %7D%0A%0A    public void testNegativeSpace() throws Exception %7B
+FileStore mocked = mock(FileStore.class);%0A        when(mocked.getUsableSpace()).thenReturn(-1L);%0A        when(mocked.getTotalSpace()).thenReturn(-1L);%0A        when(mocked.getUnallocatedSpace()).thenReturn(-1L);%0A        assertEquals(-1, mocked.getUsableSpace());
 %0A   
@@ -1526,27 +1526,14 @@
 ore(
-new MockFileStore()
+mocked
 );%0A 

use mockito instead