Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Обсуждений тред (https://javascript.ru/forum/offtopic/47364-obsuzhdenijj-tred.html)

melky 04.02.2015 23:16

Цитата:

Сообщение от Gozar (Сообщение 354984)
Запрашивай заголовки, если по заголовкам картинка, качаешь, если "фига" то нет.

хотелось бы вообще убрать HTTP из теста...
Цитата:

Сообщение от Zend (Сообщение 354998)
кстати я не вижу смысла в этом тесте так как там нет done().

там возвращается Promise.

Цитата:

Сообщение от Zend (Сообщение 354998)
по моему должно быть так:
- ждёшь завершения асинхронных штук
- в колбэке проверяешь то что тебе нужно
- вызываешь done()
ещё не плохо время контролировать, за которое тест должен выполниться

не хочешь ждать, уверен что там всё ок - отключи его, добавь "x":
xit('......

кстати чем тестируешь? mocha?

да, mocha. и с ней chai с плагинами


в общем, порешил дело! отрефакторил функцию, вынесев ввод\вывод (HTTP запрос и запись в файл) в отдельные 2 функции:
/** Скачает изображение по ссылке, сохранит в папку */
exports.downloadImage = function (imageURL) {
  var ext = path.extname(imageURL);
  var imageName = utils.getImageName(imageURL);
  var dest = path.join(imageSavePath, imageName);

  /** @type {Object} RESOLVE ARGUMENT */
  var info = {imageURL: imageURL, dest: dest, ext: ext, imageName: imageName};

  return exports.downloadImage.request(imageURL).
    then(function (buffer) {
      return exports.downloadImage.write(dest, buffer);
    }).
    return(info);
};

// Скачает ответ по ссылке и вернёт результат в формате буфера
exports.downloadImage.request = function (url) {
  return request({url: url, encoding: null}).get(1);
};

// Запишет буфер buffer в файл dest
exports.downloadImage.write = function (dest, buffer) {
  return fs.writeFileAsync(dest, buffer);
};

( request - это var request = Promise.promisify(require('request')); )

ну и в тестах сделал подмену на эти две функции (request и write)
describe('downloadImage', function () {

    var original = {};
    var url = 'http://i.imgur.com/emZNv0N.jpg';
    var buffer = new Buffer('Hello');

    var fakeRequest = sinon.stub().withArgs(url).returns(Promise.resolve(buffer));

    var fakeWrite = sinon.stub().returns(Promise.resolve());

    beforeEach(function () {
      original.request = utils.downloadImage.request;
      original.write = utils.downloadImage.write;
      utils.downloadImage.request = fakeRequest;
    });

    afterEach(function () {
      utils.downloadImage.request = original.request;
      utils.downloadImage.write = original.write;
    });

    it('should download image by url', function () {
      return utils.
        downloadImage('http://i.imgur.com/emZNv0N.jpg').
        should.eventually.
        include({imageURL: 'http://i.imgur.com/emZNv0N.jpg', ext: '.jpg'}).
        and.property('imageName').match(/^product-image-/);
    });
  });


как видите, сам тест (внутри 'it') остался таким же, как и поведение самой функции. успех!

тестировать её помощников (request и write) не вижу смысла, т.к. это обёрнутые вызовы библиотечных\встроенных функций

melky 06.02.2015 12:41

Немного угарнул
есть инструмент для оценки покрытия кода при тестах - istanbul
на его странице есть обьяснение, почему именно такое имя у проекта
Цитата:

Why the funky name?

Since all the good ones are taken. Comes from the loose association of ideas across coverage, carpet-area coverage, the country that makes good carpets and so on...
По русски:
Цитата:

Чего такое классное имя?

Потому что все нормальные уже заняли. Происходил от необоснованной ассоциации идей покрытий, ковёр-покрытие, страна, которая делает хорошие ковры и так далее ...

bes 07.02.2015 10:53

у всех оракловые дистрибутивы качаются чересчур медленно или только у меня?
начинает шустро, потом скорость резко снижается, дистрибутивы немаленькие , а у них ещё хитрожопо так сделано, что непонятно как ссылку извлечь, чтобы хотя бы её в download master передать

в связи с этим, пока не знаю, когда удастся развернуть тестовую среду, поэтому условно вопрос до понедельника (так как на работе уже всё развёрнуто :)):
напомните, пожалуйста, можно ли в оракловой базе данных через табличку dba_users или каким-либо другим способом проверить может ли пользователь коннектиться к этой базе путём сравнения его логина и пароля?
В самой dba_users пароль в поле PASSWORD хранится в зашифрованном виде, есть ли способы сделать корректное сравнение или нет, это я и хочу выяснить.
может быть есть какие-то другие механизмы такой проверки, но они мне неизвестны

в качестве сервера приложений - weblogic, там заведён data source, который создаёт пул соединений под определённым пользователем
задача - проверить могут ли обратившиеся к серверу приложений другие пользователи, которые предоставляют свой логин и пароль, коннектиться к базе данных

сейчас уже есть рабочий вариант, который кажется слишком топорным: сделать попытку соединения, если удастся, то может
думается, что всё должно быть гораздо проще :yes:

bes 07.02.2015 12:13

похоже ответ найден
http://laurentschneider.com/wordpres...spassword.html
Цитата:

the password is not longer displayed in dba_users.password in 11g

select username,password
from dba_users
where username='SCOTT';
USERNAME PASSWORD
-------- ------------------------------
SCOTT

select name,password
from sys.user$
where name='SCOTT';
NAME PASSWORD
----- ------------------------------
SCOTT F894844C34402B67
хотя не думаю, что разумно предоставлять стороннему приложению доступ лазать в sys.user$, да и в dba_users тоже, вероятно и не согласятся на это

хз как лучше провернуть авторизацию в этом случае, не делая попытку прямого коннекта под пользователем: пользователи уже могут авторизоваться под собой, но ходим не под ними, а под определённой учётной записью с определёнными правами, которая доступна через data source на сервере приложений, на основе её возможностей и нужно проверить, может ли пользователь ходить в базу или нет
кто-нибудь пытался когда-нибудь решить подобную задачу?

cyber 10.02.2015 14:25

Народ, нужна помощь с адской ос виндой xp , на ноут установлена xp но при загрузки не видит Винду на диске, как настроить вмндовый загрузчик ?
Пробовал boot.ini редактировать , но фиг там...

melky 10.02.2015 17:16

Цитата:

Сообщение от cyber (Сообщение 355965)
Народ, нужна помощь с адской ос виндой xp , на ноут установлена xp но при загрузки не видит Винду на диске, как настроить вмндовый загрузчик ?
Пробовал boot.ini редактировать , но фиг там...

в msconfig есть что-нибудь интересное?

cyber 10.02.2015 20:57

Цитата:

Сообщение от melky
в msconfig есть что-нибудь интересное?

Не, на сколько я понял когда я удалил старый системный раздел( так как при установке xp его нужно сначала удалить) то основным оно сделало 2й раздел, и поэтому старый диск Д, теперь диск С.
Нужна утилита которая установит нужный раздел системным так как загрузчик не там ищет винду

bes 10.02.2015 21:31

Цитата:

Сообщение от cyber
Не, на сколько я понял когда я удалил старый системный раздел( так как при установке xp его нужно сначала удалить) то основным оно сделало 2й раздел, и поэтому старый диск Д, теперь диск С.
Нужна утилита которая установит нужный раздел системным так как загрузчик не там ищет винду

mbr
Цитата:

0000h 446 Код загрузчика
01BEh 64 Таблица разделов
16 Раздел 1
01CEh 16 Раздел 2
01DEh 16 Раздел 3
01EEh 16 Раздел 4
01FEh 2 Сигнатура (55h AAh)
открываешь в hex-редакторе жёсткий диск, смотришь первый сектор,
начиная с 01BEh идут записи таблицы разделов, ставишь в нужной записи (например в байте 1BEh, что соответствует первому разделу) значение 80h,
в начале других записей (01CEh, 01DEh, 01EEh), должны быть нули


по 4 байта в конце каждой записи - смещение и количество секторов по lba, смотришь первую запись (если выбрал активным первый раздел), идёшь на адрес, соответствующий первому из этих 4 байтных чиcел (в hxd это ctrl+g, оно же меню Поиск - Перейти ) и смотришь, если там что-нибудь, по идее, именно с этого адреса должен начинаться код
Цитата:

Структура описания раздела
Смещение Длина Описание
00h 1 Признак активности раздела
01h 1 Начало раздела — головка
02h 1 Начало раздела — сектор (биты 0—5), цилиндр (биты 6, 7)
03h 1 Начало раздела — цилиндр (старшие биты 8, 9 хранятся в байте номера сектора)
04h 1 Код типа раздела
05h 1 Конец раздела — головка
06h 1 Конец раздела — сектор (биты 0—5), цилиндр (биты 6, 7)
07h 1 Конец раздела — цилиндр (старшие биты 8, 9 хранятся в байте номера сектора)
08h 4 Смещение первого сектора
0Ch 4 Количество секторов раздела
если не получается, анализируешь дальше :)
здесь есть полезные утилиты
http://ntfs.com/

вот ещё один бесплатный hex-редактор
http://mh-nexus.de/en/hxd/
ftp://wa651f3:anonymous@mh-nexus.de/HxDSetupPTB.zip
http://mh-nexus.de/downloads/HxDSetupRU.zip

bes 10.02.2015 21:40

Цитата:

Сообщение от bes

здесь кстати есть линк, где подробно расписано
http://thestarman.narod.ru/asm/mbr/Win2kmbr.htm

но, по-моему, нужно просто забрать данные с диска и дать xp спокойно умереть :)

cyber 11.02.2015 13:42

bes, спасибо)
Цитата:

Сообщение от bes
но, по-моему, нужно просто забрать данные с диска и дать xp спокойно умереть

Да я бы этот ноут об стену закрыл раз и навсегда, но ксожеленью...


Часовой пояс GMT +3, время: 14:42.