Вы не можете вызвать verify()
для объекта, который не является mock
. Это вы имели в виду?
Bar collaborator = mock(Bar.class);
Foo sut = spy(new Foo(collaborator));
verify(collaborator).run(expectedList);
Эта проблема может быть решена путем правильной установки *off
(четвертый параметр my_read()
).
Вам нужно возвращать счет в первый раз и ноль со второго раза вперед.
if(*off == 0) {
while (msg[count] != 0) {
put_user(msg[count], buff++);
count++;
(*off)++;
}
return count;
}
else
return 0;
Вы не соблюдаете размер буфера, переданный в функцию dev_read
, поэтому вы можете вызывать неопределенное поведение в cat
. Попробуйте следующее:
static ssize_t dev_read( struct file *filp, char *buff, size_t len, loff_t *off )
{
size_t count = 0;
printk( KERN_ALERT"inside read %d\n", *off );
while( msg[count] != 0 && count < len )
{
put_user( msg[count], buff++ );
count++;
}
return count;
}
.read
также должна правильно обрабатывать свои аргументы len
и off
. Самый простой способ реализовать чтение из файла с буферизацией памяти - использовать хелпер simple_read_from_buffer
:
static ssize_t dev_read(struct file *filp, char *buff, size_t len, loff_t *off)
{
return simple_read_from_buffer(buff, len, off, msg, 100);
}
Вы можете проверить код этого помощника (определенный в fs/libfs.c
) для образовательных целей.
BTW, для вашего метода .write
вы можете использовать помощник simple_write_to_buffer
.